Sto usando dapper per fare un accesso a Oracle. Ho uno scenario in cui devo avere un parametro di output con un tipo di OracleDbType.Clob. Poiché sto utilizzando dapper e quindi utilizzo l'enumerazione DbType di base, sto utilizzando l'enumerazione DbType.Object come suggerito qui http://docs.oracle.com/html/B14164_01/featOraCommand.htm per sostituire OracleDbType.Clob.Dapper e Oracle Clob tipo
Tuttavia, questo imposta il parametro di comando (in profondità nel dapper) come DbType object e oracle type Blob (come provider DbConnection un concreto OracleParameter). Il problema con questo proc Oracle funziona solo se questo parametro è di tipo Clob not Blob.
Il puro codice ADO funziona come un fascino (utilizzando OracleParameter e OracleConnection, ecc.) Ma non sembra esserci alcun modo per impostare il tipo concreto o l'hook in questo processo di creazione DbParameter in dapper per modificare questo OracleType sul CommandParameter restituito?
Questo funziona:
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;
}
Questo fallisce:
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");
Delle idee ??
Grazie,
Jon
Sembra fantastico! Bello. –
@MarcGravell quando si sceglie di creare/utilizzare un'implementazione IDynamicParameters personalizzata su ICustomQueryParameter? – Damian
@Damian esattamente uno contro 0-a-molti, in pratica –