0

当我在我的 .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 dll,我想使用新的 oracle .net 提供程序。我试过这个:

   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 行,谁能帮我解决这个问题。谢谢你。

4

1 回答 1

2

太棒了,一个设计决定总是会在开始使用它时导致问题(偶尔也会出现!)

由于这回答了您的问题,因此我将“提升”我对答案的评论(如果这不正确,请告诉我,我将删除此答案)

请记住,ODP.net 默认按位置绑定(与默认 System.Data.Ora 不同)——您可以使用

BindByName = true 

强制命令对象表现相同

于 2013-02-15T13:11:32.007 回答