在sql阅读器上键入不匹配异常

时间:2015-12-03 11:45:48

标签: c# sql ms-access oledb

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

  

"标准表达式中的数据类型不匹配" - > 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()

3 个答案:

答案 0 :(得分:0)

已经有一段时间了,因为我已经确定了Access,但您似乎无法在任何时候将参数值传递给查询。解决这个问题,我希望它能够正常运作。

答案 1 :(得分:0)

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

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

这样的SQL
WHERE [Article_ID] = asdf4711

对字符串无效。

你可以使用撇号

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

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

答案 2 :(得分:0)

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

var HW_RevrTest = cur.execute(query);