我想插入两行到表(sequentiel)。第一个插入命令执行没有任何问题。第二个插入命令卡在ExecuteNonQuery()
部件中。当我删除返回部分(OracleParameter
与Direction = Output
)时,两个插入都是成功的。第二次插入失败,因为返回到输出参数(OracleParameter)
无效(序列中的每个不同的数据执行两次):
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;
}
}
}
显示C#代码.... –
我已经把代码片段编辑部分 – hy13
我仍然想看看如何发布代码被调用两次 –