sql reader 类型不匹配异常

Type mismatch exception on sql reader

在 C# 中尝试读取我的访问数据库文件时,我得到一个

"Datatype mismatch in criteria expression" -> system.data.oledb.oledbexception (0x80040e07).

我尝试使用的代码是

public static void readHW(OleDbConnection connection, string article, string HWRev)
{            
   OleDbCommand ReadHW = new OleDbCommand($"SELECT * FROM [HW_Revision] WHERE [Article_ID] = {article} AND HW_Revision_ID = {HWRev}");          
   ReadHW.Connection = connection;
   OleDbDataReader reader = null;
   try
   {
      reader = ReadHW.ExecuteReader();
   }
   catch (Exception e)
   {
      Console.WriteLine(e);
   }
}

这是我之前的 python 代码与此 SQL cmd

的改编
HW_RevrTest = cur.execute("""SELECT * FROM HW_Revision WHERE Article_ID = ? AND HW_Revision_ID = ?""", [Article, HWRev]).fetchall()

确定我完成 Access 已经有一段时间了,但您似乎在任何时候都没有将参数值传递到查询中。解决这个问题,我希望它能奏效。

您的 python 代码是一个 参数化查询 ,其中数据库负责正确使用参数。

但是这个:{article} 是(我假设)一个简单的变量替换,你最终得到 SQL like

WHERE [Article_ID] = asdf4711

这对字符串无效。

您可以使用撇号

"SELECT * FROM [HW_Revision] WHERE [Article_ID] = '{article}' AND HW_Revision_ID = '{HWRev}'"

或更好:使用实际的 parameterized OLEDB query

string  query = "SELECT * FROM HW_Revision WHERE Article_ID =" + article  + " AND HW_Revision_ID = " + HWRev;

var HW_RevrTest = cur.execute(query);