我正在使用 dapper 进行一些 oracle 访问。我有一个场景,我必须有一个类型为 OracleDbType.Clob 的输出参数。当我使用 dapper 并因此使用基本 DbType 枚举时,我正在使用此处建议的 DbType.Object 枚举http://docs.oracle.com/html/B14164_01/featOraCommand.htm来代替 OracleDbType.Clob。
但是,这会将命令参数(深入 dapper)设置为 DbType 对象和 oracle 类型 Blob(因为 DbConnection 提供了具体的 OracleParameter)。这个 Oracle proc 的问题只有在这个参数的类型是 Clob 而不是 Blob 时才有效。
纯 ADO 代码就像一个魅力(使用 OracleParameter 和 OracleConnection 等),但似乎无法在 dapper 中设置具体类型或挂钩到此 DbParameter 创建过程中以更改返回的 CommandParameter 上的此 OracleType?
这有效:
using (OracleConnection conn = new OracleConnection("some connection string"))
{
conn.Open();
var cmd = new OracleCommand("ProcName", conn);
cmd.CommandType = CommandType.StoredProcedure;
var paramOne = new OracleParameter("ReturnValue", OracleDbType.Clob, int.MaxValue, null, ParameterDirection.Output);
cmd.Parameters.Add(paramOne);
cmd.ExecuteNonQuery();
var value1 = paramOne.Value;
}
这失败了:
DynamicParameters dyanmicParameters = new DynamicParameters();
dyanmicParameters.Add("ReturnValue", null, DbType.Object, ParameterDirection.Output);
connection.Execute("ProcName", dyanmicParameters, commandType: CommandType.StoredProcedure);
var val = dynamicParameters.Get<object>("ReturnValue");
有任何想法吗??
谢谢,
乔恩