カーソルを返すOracleストアドプロシージャでDapperを使用する

.net c# dapper oracle

質問

カーソルを返すOracleストアドプロシージャでDapperを使う方法は?

var p = new DynamicParameters();
p.Add("foo", "bar");
p.Add("baz_cursor", dbType: DbType.? , direction: ParameterDirection.Output);

ここで、DbTypeはCursorメンバーを持たないSystem.Data.DbTypeです。私はDbType.Objectを使用しようとしましたが、OracleClientとOracleDataAcessの両方で動作しません。

代わりにOracleTypeまたはOracleDbTypeを使用する方法はありますか?

受け入れられた回答

実装する必要があります:

 public interface IDynamicParameters
 {
    void AddParameters(IDbCommand command, Identity identity);
 }

AddParametersコールバックでIDbCommandOracleCommandキャストし、DB固有のIDbCommandを追加しOracleCommand


人気のある回答

ここの解決に感謝します。私は、単純なDynamicParameterデコレータを使用して、少し少ないコードで同じことを達成しました:

public class OracleDynamicParameters : SqlMapper.IDynamicParameters
{
    private readonly DynamicParameters dynamicParameters = new DynamicParameters();

    private readonly List<OracleParameter> oracleParameters = new List<OracleParameter>();

    public void Add(string name, object value = null, DbType? dbType = null, ParameterDirection? direction = null, int? size = null)
    {
        dynamicParameters.Add(name, value, dbType, direction, size);
    }

    public void Add(string name, OracleDbType oracleDbType, ParameterDirection direction)
    {
        var oracleParameter = new OracleParameter(name, oracleDbType, direction);
        oracleParameters.Add(oracleParameter);
    }

    public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
    {
        ((SqlMapper.IDynamicParameters)dynamicParameters).AddParameters(command, identity);

        var oracleCommand = command as OracleCommand;

        if (oracleCommand != null)
        {
            oracleCommand.Parameters.AddRange(oracleParameters.ToArray());
        }
    }
}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ