使用布尔输出参数从实体框架调用Oracle过程

时间:2018-04-10 08:29:02

标签: oracle entity-framework

我正在尝试使用Entity Framework 6在Oracle 11g数据库中调用存储过程。该过程的签名如下:

PROCEDURE_NAME(param1 IN varchar2, param2 IN varchar2, result OUT boolean)

我尝试使用较短版本,使用ExecuteSqlCommand和使用CreateCommand的详细版本,如下所示:

var result = new OracleParameter("result", OracleDbType.Boolean, ParameterDirection.Output)
{
    Direction = System.Data.ParameterDirection.Output
};
var parameters = new[] {
    new OracleParameter("param1", param1),
    new OracleParameter("param2", param2)
    result
};

using (var ctx = new MyDbContext())
using (var cmd = ctx.Database.Connection.CreateCommand() as OracleCommand)
{
    try
    {
        cmd.Connection.Open();
        cmd.CommandText = "PROCEDURE_NAME";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddRange(parameters);

        cmd.ExecuteNonQuery();
    }
    finally
    {
        cmd.Connection.Close();
    }
}

这引发了一个execption,ORA-03115: unsupported network datatype or representation 我猜测它与布尔值有关,因为在涉及到甲骨文时它通常很麻烦,但无法找到解决方法。不幸的是,我无法修改程序,这将是显而易见的选择。尝试将OracleDbType更改为整数或char,正如其他一些帖子所建议的那样,而是针对不正确的数据类型抛出异常。

0 个答案:

没有答案