简体   繁体   English

SQL Reader上的类型不匹配异常

[英]Type mismatch exception on sql reader

When trying to read from my access db file in C# I get a 尝试从C#中的Access数据库文件读取时,出现

"Datatype mismatch in criteria expression" -> system.data.oledb.oledbexception (0x80040e07). “条件表达式中的数据类型不匹配”-> system.data.oledb.oledbexception(0x80040e07)。

The code I'm trying to use is 我正在尝试使用的代码是

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);
   }
}

This is an adaption of my earlier python code with this SQL cmd 这是我以前的python代码与此SQL cmd的改编

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

It's a while since I've done Access to be certain, but you don't seem to be passing your parameter values into the query at any point. 自从我完成Access以来已经有一段时间了,但是您似乎在任何时候都没有将参数值传递到查询中。 Fix that and I'd hope it'd work. 解决这个问题,我希望它能起作用。

Your python code was a parameterized query , where the database takes care of correct parameter usage. 您的python代码是一个参数化查询 ,其中数据库负责正确使用参数。

But this: {article} is (I assume) a simple variable substitution, where you end up with SQL like 但是,这: {article}是(我假设)一个简单的变量替换,在这里您最终得到像SQL这样的结果

WHERE [Article_ID] = asdf4711

which is invalid for strings. 这对字符串无效。

You can either use apostrophes 您可以使用撇号

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

or better: use an actual parameterized OLEDB query . 或更好:使用实际的参数化OLEDB查询

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

var HW_RevrTest = cur.execute(query);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM