Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Mono调用oracle函数?_C#_Linux_Oracle_Mono - Fatal编程技术网

C# 如何使用Mono调用oracle函数?

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

使用Mono时,我需要调用oracle数据库中的函数。该函数有两个输入参数和一个输出参数

首先,我使用.Net运行时进行了测试。以下非常简单的代码完成了这项工作:

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.