0

データベーステーブルにデータを挿入するストアドプロシージャを作成しましたが、データテーブルをストアドプロシージャに渡す方法がわかりません。使用方法を教えてください。

以下は私のストアドプロシージャです

CREATE OR REPLACE PROCEDURE PR_SREE_TEST(p_recordset In SYS_REFCURSOR) IS

Contrac_rc SREE_TEST%rowtype;
BEGIN

   Loop
   Fetch p_recordset Into Contrac_rc;
   EXIT WHEN p_recordset%NOTFOUND;
       Insert into SREE_TEST(CT,DESC,FLAG)
       Values(Contrac_rc.CT,Contrac_rc.DESC,Contrac_rc.FLAG);

   End Loop;


   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END PR_SREE_TEST;
/

とcsページ

  public DataSet sreetest(DataTable dt)
        {
            DataSet dsRegularIndentdtl = new DataSet();
            try
            {
                OracleConnection OraConn = new OracleConnection(strDBConnection);
                OraConn.Open();

                OracleCommand OraCmd = new OracleCommand();
                OraCmd.Connection = OraConn;
                OraCmd.CommandText = "PR_SREE_TEST";
                OraCmd.CommandType = CommandType.StoredProcedure;
                OracleParameter parameter = new OracleParameter();


                var recordSet1 = new DataTable();
                recordSet1 = dt;
               OraCmd.Parameters.Add("p_recordset", OracleDbType.RefCursor, recordSet1, ParameterDirection.Input);
                 OraCmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return dsRegularIndentdtl;
        }
    }

上記は私のコードで、 p_recordset が有効ではないと言っています。実行方法を教えてください。

4

1 に答える 1

0

OraCmd.Parameters.Add()の正しいオーバーロードを使用していることを確認してください。

msdnによると、4番目のパラメーターはパラメーターの方向ではなく、次のようになります。

public OracleParameter Add(
    string parameterName,
    OracleType dataType,
    int size,
    string srcColumn
)
于 2012-08-19T08:15:57.097 に答える