How can I use Dapper's strongly-typed query parameters with Sybase ASE?

前端 未结 1 1402
天命终不由人
天命终不由人 2021-01-05 21:02

Dapper can pass query parameters as anonymous objects, and supports any ADO.NET data provider. However, when running the following query against the Sybase 15 ADO.NET driver

相关标签:
1条回答
  • 2021-01-05 21:33

    As far as I can tell, the reason seems to be something to do with Sybase's AseParameter class, and not correctly mapping DbType to AseDbType values.

    You can work around the problem by defining a custom Dapper IDynamicParameters set, and populating it with AseParameter objects directly:

    public class AseCommandParameters : List<AseParameter>, SqlMapper.IDynamicParameters
    {
        public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
        {
            foreach (var parameter in this)
                command.Parameters.Add(parameter);
        }
    }
    

    And then passing an instance into the query:

    using (var connection = new AseConnection("..."))
    {
        connection.Open();
    
        var parameters = new AseCommandParameters
        {
            new AseParameter("@table_name", "dbo.sysusers")
        };
    
        var results = connection.Query<Foo>("dbo.sp_columns", parameters, 
            commandType: CommandType.StoredProcedure);
    }
    

    This works, and also lets you specify the AseDbType for each parameter.

    0 讨论(0)
提交回复
热议问题