C# 如何使用Mono调用oracle函数?
使用Mono时,我需要调用oracle数据库中的函数。该函数有两个输入参数和一个输出参数 首先,我使用.Net运行时进行了测试。以下非常简单的代码完成了这项工作:C# 如何使用Mono调用oracle函数?,c#,linux,oracle,mono,C#,Linux,Oracle,Mono,使用Mono时,我需要调用oracle数据库中的函数。该函数有两个输入参数和一个输出参数 首先,我使用.Net运行时进行了测试。以下非常简单的代码完成了这项工作: var dbcon = new OracleConnection("my connection string"); dbcon.Open(); OracleCommand cmd = dbcon.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.C
var dbcon = new OracleConnection("my connection string");
dbcon.Open();
OracleCommand cmd = dbcon.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "my_pkg.my_func";
OracleParameter p = new OracleParameter("ReturnValue", OracleType.Number);
p.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(p);
p = new OracleParameter("p_in1", OracleType.VarChar);
p.Size = 5;
p.Direction = ParameterDirection.Input;
p.Value = p1;
cmd.Parameters.Add(p);
p = new OracleParameter("p_in2", OracleType.VarChar);
p.Size = 20;
p.Direction = ParameterDirection.Input;
p.Value = p2;
cmd.Parameters.Add(p);
p = new OracleParameter("p_out", OracleType.VarChar);
p.Direction = ParameterDirection.Output;
p.Size = 512;
cmd.Parameters.Add(p);
cmd.ExecuteNonQuery();
return cmd.Parameters["p_out"].Value.ToString();
但是,由于目标操作系统是Linux,我将运行时(Utilities=>Options=>.Net运行时)更改为Mono(2.10.9版)。我当时遇到的第一个问题是
据我所知,唯一的解决办法是在OracleParameter.OracleType
之前设置OracleParameter.Value
,即使对于输出参数也是如此。。。所以代码改为
p = new OracleParameter();
p.ParameterName = "p_in1";
p.Size = 5;
p.Direction = ParameterDirection.Input;
p.Value = code.ToString ();
p.OracleType = OracleType.VarChar;
NullReferenceException
消失,但另一个出现了:
PLS-00306:调用中参数的数量或类型错误
“我的_func”
ORA-06550:第1行第7列:PL/SQL:语句被忽略
正如书中所说:
是否支持ParameterDirection.ReturnValue
参数
或者为什么它与.Net运行时一起工作而与Mono不一起工作?我知道这是一个非常古老的问题,但是您是否设法使它工作了?我这里也有同样的问题。Thanks@EdgarRochaCarvalho不幸的是没有。我不得不放弃使用单声道的想法。据我记忆所及,单声道几乎没有其他问题,我无法解决。所以我改用Java,它与存储过程和out参数配合得很好,所以我创建了一个sp来调用函数,并将其返回值赋给存储过程的out参数。我不能放弃mono,所以我将使用此解决方法。谢谢
Input/Output and Return parameters have not been tested.