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 の問題は、このパラメーターが Blob ではなく Clob 型である場合にのみ機能します。
純粋な ADO コードは (OracleParameter や OracleConnection などを使用して) 魔法のように機能しますが、具体的な型を設定したり、この 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");
何か案は??
ありがとう、
ジョン