Dapper icon indicating copy to clipboard operation
Dapper copied to clipboard

ODBC query with parameter throws "[HY104] invalid precision value"

Open wakuflair opened this issue 2 years ago • 1 comments

It's a very simple query with a LIKE operator on an access database:

string sql = "SELECT FROM Users WHERE UserName LIKE ?";
var result = conn.Query<User>(sql, "%ab%"});

Throws exception:

Unhandled exception. System.Data.Odbc.OdbcException (0x80131937): ERROR [HY104] [Microsoft][ODBC Microsoft Access Driver]Invalid precision value

I also tried different parameter passing ways:

conn.Query<User>(sql, new {UserName = "%ab%"})
var dp = new DynamicParameters();
dp.Add("", "%ab%");
conn.Query<User>(sql, dp);

None of them works. But using ODBC parameter directly can query as expected:

var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM Users WHERE UserName LIKE ?";
cmd.Parameters.Add(new OdbcParameter("", "%ab%"));
var reader = cmd.ExecuteReader();

Am I missing something?

wakuflair avatar Mar 17 '22 06:03 wakuflair

I found it may be related to the size, Dapper by default sets the size as 4000 which is too large for the Access string column.

wakuflair avatar Mar 17 '22 06:03 wakuflair