2

C#/Oracleの出力パラメータに問題があります。動作させるために必要なコードを分離しました。

これははるかに大きなSQLステートメントの一部であるため、意味がない場合でもあまり心配する必要はありません。つまり、行をコピーして新しいIDを指定し、その新しいIDを返す必要があります。動かなかった「RETURNING」を使ってみました。以下のコードが機能しない理由はわかりませんが、「ORA-01036:不正な変数名/番号」エラーが発生します。誰かが私が間違っていることを見ることができますか?

using (OracleConnection conn = new OracleConnection(connString))
{
    // Open connection and create command.
    conn.Open();
    using (OracleCommand cmd = new OracleCommand())
    {
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.Add("outValue", OracleType.Int32).Direction = ParameterDirection.Output;
        cmd.CommandText = "SELECT seq.nextval INTO :outValue FROM dual";
         try
         {
             cmd.ExecuteNonQuery();
         }
         catch (Exception e)
         {
             // This is just to see the exception when it fails.
         }
     }
 }
4

3 に答える 3

0

名前付きパラメーターを使用しています。設定してみてください:

cmd.BindByName = true;
于 2012-05-28T13:42:10.070 に答える
0

パラメータの名前が一致しません。

cmd.Parameters.Add(":outValue", OracleType.Int32).Direction.......;
                    ^

クエリ構文でこのバリエーションも確認しました

"BEGIN SELECT seq.nextval INTO :outValue FROM dual END;"
于 2012-05-28T13:42:54.037 に答える
0

このように「returning」キーワードを試しましたか?このコードは私のために働きます。

 using (OracleConnection conn = new OracleConnection(connString))
 {
     // Open connection and create command.
     conn.Open();
     using (OracleCommand cmd = new OracleCommand())
     {
         cmd.Connection = conn;
         cmd.CommandType = CommandType.Text;
         cmd.Parameters.Add("outValue", OracleType.Int32).Direction = ParameterDirection.Output;
         cmd.CommandText = "insert into table (id, value) values (seq.nextval, 'value') returning id into :outValue";
         cmd.ExecuteNonQuery();
     }
 }
于 2012-05-28T14:04:18.777 に答える