在C#中使用输出参数时出现ORA-01036错误

时间:2012-05-28 13:38:50

标签: c# oracle

我在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.
         }
     }
 }

3 个答案:

答案 0 :(得分:0)

您正在使用命名参数。尝试设置:

cmd.BindByName = true;

答案 1 :(得分:0)

参数名称不匹配。

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

我也在查询语法

上看到了这种变化
"BEGIN SELECT seq.nextval INTO :outValue FROM dual END;"

答案 2 :(得分: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();
     }
 }