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
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.