我在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.
}
}
}
答案 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();
}
}