Używam dapper, aby uzyskać dostęp do Oracle. Mam scenariusz, w którym muszę mieć parametr wyjściowy z typem OracleDbType.Clob. Ponieważ używam wyrafinowanego, a więc używającego podstawowego wyliczenia DbType, używam wyliczenia DbType.Object zgodnie z sugestią tutaj http://docs.oracle.com/html/B14164_01/featOraCommand.htm, aby stać na OracleDbType.Clob.Dapper i Oracle Clob typ
Jednak ustawia parametr polecenia (w głąb dappera) na obiekt DbType i Blob typu oracle (jako dostawca DbConnection konkretny OracleParameter). Problem polegający na tym procencie Oracle działa tylko wtedy, gdy parametr ten ma typ Clob not Blob.
Czysty kod ADO działa jak zaklęcie (używając OracleParameter i OracleConnection itp.), Ale wydaje się, że nie ma sposobu, aby ustawić konkretny typ lub przechwycić w tym procesie tworzenia DbParameter w eleganckim, aby zmienić ten OracleType na zwróconym CommandParameter?
to działa:
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;
}
ta zawodzi:
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");
Wszelkie pomysły ??
Dzięki,
Jon
Wygląda świetnie! Miły. –
@MarcGravell, kiedy można wybrać tworzenie/używanie niestandardowej implementacji IDynamicParameters za pomocą ICustomQueryParameter? – Damian
@Damian dokładnie jeden vs 0-do-wielu, w zasadzie –