我正在尝试使用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,正如其他一些帖子所建议的那样,而是针对不正确的数据类型抛出异常。