c# - ORA-06550 调用 Oracle 存储过程时参数数量或类型错误

标签 c# .net database oracle stored-procedures

procedure select_card_transaction(trans_id   nvarchar2,
                                    usr_id    number,
                                    Quantity out number) is
  begin
    select count(*)
      into Quantity
      from user_cards u
     where u.transaction_id = trans_id
       and u.user_id = usr_id;
  end;

并消费它:

using(var conn = new OracleConnection(Settings.Default.OraWUConnString))
            { 
                var cmd = conn.CreateCommand();
                cmd.CommandText = "for_temporary_testing.select_card_transaction";
                cmd.CommandType = CommandType.StoredProcedure;



                cmd.Parameters.AddWithValue("trans_id", TransactionID);
                cmd.Parameters.AddWithValue("usr_id", UserID);

                var q = new OracleParameter("Quantity", OracleType.Number);
                q.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(q);
                //cmd.Parameters[0].OracleType = OracleType.NVarChar;
                //cmd.Parameters[1].OracleType = OracleType.Number; 

                conn.Open();
                var obj = cmd.ExecuteNonQuery();

                conn.Close();
                return (int)q.Value == 1;
            }

它返回以下错误。 调用 Oracle 存储过程时 ORA-06550 参数数量或类型错误... 有什么想法吗?

最佳答案

我以前也遇到过同样的问题。您使用 ODP.Net 驱动程序吗?我首先通过添加输出参数解决了这个问题。这需要在输入参数之前完成。在你的情况下,它看起来像

 using(var conn = new OracleConnection(Settings.Default.OraWUConnString))
            { 
                conn.Open();

                var cmd = conn.CreateCommand();
                cmd.CommandText = "for_temporary_testing.select_card_transaction";
                cmd.CommandType = CommandType.StoredProcedure;

                // Return value parameter has to be added first !
                var Quantity = new OracleParameter();
                Quantity.Direction = ParameterDirection.ReturnValue;
                Quantity.OracleDbType = OracleDbType.Int32;
                cmd.Parameters.Add(Quantity);

                //now add input parameters
                var TransID = cmd.Parameters.Add("trans_id", TransactionID);
                TransID.Direction = ParameterDirection.Input;
                TransID.OracleDbType = OracleDbType.NVarchar2;

                var UsrID = cmd.Parameters.Add("usr_id", UserID);
                UsrID.Direction = ParameterDirection.Input;
                UsrID.OracleDbType = OracleDbType.Int32;

                cmd.ExecuteNonQuery();

                conn.Close();
                return Convert.ToInt32(Quantity.Value);
            }

关于c# - ORA-06550 调用 Oracle 存储过程时参数数量或类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13253000/

相关文章:

c# - 等同于 GTK 中的密码字符#

c# - LDAP SearchResult 不包含用户属性

c# - 创建表单实例时的反射错误

c# - 使用 .NET 开发新的应用程序?

c# - 将日期时间转换为日期格式 dd/mm/yyyy

c# - 字符串 '01/06/2015' 不是有效的 AllXsd 值

.net - 某些属性的自定义反序列化

mysql - SQL表创建以节省多点之间的距离

mysql - 如何使用 group by (MySQL) 查找中值

java - 如何根据操作更改启动器 Activity