如何使用oracle .Net提供程序调用Oracle函数?

时间:2013-02-15 11:31:24

标签: .net oracle function call provider

当我在.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行 任何人都可以帮我解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:2)

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

由于这回答了你的问题,我会'推广'我对答案的评论(如果这不合适,请告诉我,我会删除这个答案)

请记住,默认情况下ODP.net按位置绑定(默认System.Data.Ora中断) - 您可以使用

BindByName = true 

强制命令对象表现相同的