我正在尝试将两行插入到表中(sequentiel)。执行第一个插入命令没有任何问题。第二个插入命令卡在 ExecuteNonQuery()
部分。当我删除返回部分(OracleParameter
和 Direction = Output
)时,两个插入都成功。
不起作用(按顺序执行两次,每次执行不同的数据):
cmd.CommandText = "INSERT INTO table (Col1, Col2, Col3,...) VALUES (:ParamCol1, :ParamCol2, :ParamCol3,...) RETURNING ROWIDTOCHAR(ROWID) INTO :OutputROWID";
作品:
cmd.CommandText = "INSERT INTO table (Col1, Col2, Col3,...) VALUES (:ParamCol1, :ParamCol2, :ParamCol3,...)";
输出参数的声明和初始化如下:
OracleParameter outputRowId = new OracleParameter(":OutputROWID", OracleDbType.Varchar2, 30) { Direction = ParameterDirection.Output })
有趣的是,当我使用第一种方法(使用返回的 ROWID
)时它也有效,但只有当我将第二个插入中的参数重命名为 :OutputROWID2
.
关于为什么执行会卡住以及我该如何解决这个问题有什么想法吗?
编辑:
这里是较长的代码片段:
using (OracleTransaction transaction = Globals.Db.Connection.BeginTransaction())
{
using (OracleCommand cmd = Globals.Db.Connection.CreateCommand())
{
cmd.BindByName = true;
cmd.CommandText = "INSERT INTO table (Col1, Col2, Col3,...) VALUES (:ParamCol1, :ParamCol2, :ParamCol3,...) RETURNING ROWIDTOCHAR(ROWID) INTO :OutputROWID";
OracleParameter outputRowId = new OracleParameter(":OutputROWID", OracleDbType.Varchar2, 30) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(paramCol1, data["Col1"]);
cmd.Parameters.Add(paramCol2, data["Col2"]);
cmd.Parameters.Add(paramCol3, data["Col3"]);
...
cmd.Parameters.Add(outputRowId);
try
{
cmd.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception ex)
{
return;
}
}
}
最佳答案
尝试将 outputRowId 定义为 ParameterDirection.InputOutput
关于c# - 由于返回到输出参数 (OracleParameter),第二次插入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21430427/