Cursor를 반환하는 Oracle 저장 프로 시저와 함께 Dapper 사용

.net c# dapper oracle

문제

Dapper 를 사용하여 커서를 반환하는 Oracle 저장 프로 시저를 사용하려면 어떻게해야합니까?

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 특정 매개 변수를 추가합니다.


인기 답변

솔루션을 주셔서 감사합니다. 간단한 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는 합법적입니까? 예, 이유를 알아보십시오.