【发布时间】:2013-01-31 08:56:39
【问题描述】:
当我在我的 .net mvc 项目中使用旧的 Oracle Dll 时,它可以工作:
cmd.CommandText = "dba.user_login";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("KUL", OracleType.VarChar).Value = userName;
cmd.Parameters.Add("SIFRE", OracleType.VarChar).Value = pass;
cmd.Parameters.Add("FLAG", OracleType.Float).Value = 1;
cmd.Parameters.Add("HATA", OracleType.VarChar).Value = "error";
cmd.Parameters.Add("result", OracleType.Float).Direction = ParameterDirection.ReturnValue;
但我想使用新的 oracle .net 提供程序,因为不推荐使用旧的 oracle dll。我试过这个:
cmd.CommandText = "dba.user_login";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("KUL", OracleDbType.Varchar2).Value = userName;
cmd.Parameters.Add("SIFRE", OracleDbType.Varchar2).Value = pass;
cmd.Parameters.Add("FLAG", OracleDbType.Single).Value = 1;
cmd.Parameters.Add("HATA", OracleDbType.Varchar2).Value = "error";
cmd.Parameters.Add("result", OracleDbType.Single).Direction = ParameterDirection.ReturnValue;
但它不起作用。异常:ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误\nORA-06512:在第 1 行 任何人都可以帮我解决这个问题。谢谢。
【问题讨论】:
-
继续并发布您正在调用的函数的定义。请记住,ODP.net(我怀疑这是您所指的“新预言机提供者”)默认按位置绑定(与默认 System.Data.Ora 不同)——您可以使用 BindByName = true 来强制命令对象表现相同。
-
我使用的是 11.2.0 ODP.net (Oracle.DataAccess.dll)。我插入了 BindByName = true => 并且它有效。非常感谢。
标签: .net oracle function call provider