Passing query parameters in Dapper using OleDb

前端 未结 4 1208
逝去的感伤
逝去的感伤 2020-12-03 21:55

This query produces an error No value given for one or more required parameters:

using (var conn = new OleDbConnection(\"Provider=...\"))
{
  co         


        
4条回答
  •  北荒
    北荒 (楼主)
    2020-12-03 22:06

    The ? for parameters was part of the solution for me, but it only works with integers, like ID. It still fails for strings because the parameter length isn't specifed.

    OdbcException: ERROR [HY104] [Microsoft][ODBC Microsoft Access Driver]Invalid precision value
    System.Data.Odbc. OdbcParameter.Bind(OdbcStatementHandle hstmt, OdbcCommand command, short ordinal, CNativeBuffer parameterBuffer, bool allowReentrance)
    System.Data.Odbc.OdbcParameterCollection.Bind(OdbcCommand command, CMDWrapper cmdWrapper, CNativeBuffer parameterBuffer) System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, string method, bool needReader, object[] methodArguments, SQL_API odbcApiMethod)
    System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, string method, bool needReader)
    System.Data.Common.DbCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
    Dapper.SqlMapper.QueryAsync(IDbConnection cnn, Type effectiveType, CommandDefinition command) in SqlMapper.Async.cs
    WebAPI.DataAccess.CustomerRepository.GetByState(string state) in Repository.cs
    var result = await conn.QueryAsync(sQuery, new { State = state });
    WebAPI.Controllers.CustomerController.GetByState(string state) in CustomerController .cs
    return await _customerRepo.GetByState(state);

    For Dapper to pass string parameters to ODBC I had to specify the length.

    var result = await conn.QueryAsync(sQuery, new { State = new DbString { Value = state, IsFixedLength = true, Length = 4} });
    

提交回复
热议问题