C# Oracle 存储过程参数顺序

标签 c# oracle stored-procedures

有了这个

PROCEDURE "ADD_BOOKMARK_GROUP" (
  "NAME" IN VARCHAR2, 
  "BOOKMARK_GROUP_ID" IN NUMBER, 
  "STAFF_ID" IN VARCHAR2,
  "MAX_NO" IN INT,
  "NUMFOUND" OUT INT, 
  "NEW_ID" OUT NUMBER) IS

BEGIN

NEW_ID := -1;

SELECT COUNT(*) INTO NUMFOUND FROM BOOKMARK_GROUP_TABLE WHERE STAFF_ID = STAFF_ID;

IF NUMFOUND < MAX_NO THEN
    INSERT INTO BOOKMARK_GROUP_TABLE (NAME, BOOKMARK_GROUP_ID, STAFF_ID) VALUES(NAME, BOOKMARK_GROUP_ID, STAFF_ID);
    SELECT BGT_SEQUENCE.currval INTO NEW_ID FROM dual;
END IF;
END;

我发现有趣的是,如果我不按定义参数的顺序添加参数,例如

OracleCommand cmd = new OracleCommand("ADD_BOOKMARK_GROUP", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("NAME", name));
...
cmd.Parameters.Add(new OracleParameter("NEW_ID", OracleDbType.Decimal)).Direction = ParameterDirection.Output;
cmd.Parameters.Add(new OracleParameter("NUMFOUND", OracleDbType.Int32)).Direction = ParameterDirection.Output;

代替

OracleCommand cmd = new OracleCommand("ADD_BOOKMARK_GROUP", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("NAME", name));
...
cmd.Parameters.Add(new OracleParameter("NUMFOUND", OracleDbType.Int32)).Direction = ParameterDirection.Output;
cmd.Parameters.Add(new OracleParameter("NEW_ID", OracleDbType.Decimal)).Direction = ParameterDirection.Output;

返回的值

cmd.Parameters["NEW_ID"].Value.ToString()

cmd.Parameters["NUMFOUND"].Value.ToString()

得到交换,尽管通过 VS2008 服务器资源管理器运行该过程会返回正确的数据。

这是为什么?

最佳答案

您或许可以在 OracleCommand 对象上设置 BindByName 参数。这适用于带参数的直接 SQL 查询,我没有尝试过使用存储过程,但它是合乎逻辑的......

cmd.BindByName = true;

关于C# Oracle 存储过程参数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959242/

相关文章:

c# - 连接到 blob 和 sql 存储的 Azure 函数

c# - 下载 SSRS 报告并保存在特定位置(C#)(未经授权)

c# - 类型转换泛型

c# - 如果类型仅称为 System.Type,如何获取类型的默认值?

mysql - 错误 : column is invalid because it is not contained in either an aggregate function or the GROUP BY

sql - 从查询结果动态生成sql插入语句

java - 在 Windows 中验证 tnsnames.ora 语法

mysql - 将 SQL 查询转换为存储过程

performance - Linq To Sql 与 Entity Framework 性能

mysql - 在MySql存储函数中生成随机字符串