c# - 由于返回到输出参数 (OracleParameter),第二次插入失败

标签 c# .net database oracle odp.net

我正在尝试将两行插入到表中(sequentiel)。执行第一个插入命令没有任何问题。第二个插入命令卡在 ExecuteNonQuery() 部分。当我删除返回部分(OracleParameterDirection = 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 })

引用:OracleParameter

有趣的是,当我使用第一种方法(使用返回的 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/

相关文章:

ios - 在 CoreData 中保留 ABPerson 的引用

c# - Task.WhenAll 为 Task<ConcurrentDictionary> 创建副本

c# sha256 使用用户名作为盐来计算密码哈希

c# - 向上转换而不保留对派生类型的引用

javascript - 是否可以使用 C# 从使用 Javascript 动态添加的行中获取值?

django - 具有多种变体的产品

javascript - Replace() 标签在 JavaScript 中不起作用

c# - 检查 Gridview 的前 5 行

c# - Entity Framework 7 审计日志

c# - 如何彻底解决IoC循环引用?