2

我在 C#/Oracle 中的输出参数有问题。我已经隔离了我需要开始工作的代码。

这是一个更大的 SQL 语句的一部分,所以如果它没有意义,不要太担心。简而言之,我需要复制一行,给它一个新 ID 并返回该新 ID。我尝试使用不起作用的“返回”。我看不出为什么下面的代码不应该工作,但我收到“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

您是否尝试过这样的“返回”关键字?这段代码对我有用。

 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 回答
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 回答