【问题标题】:Type mismatch exception on sql readersql阅读器上的类型不匹配异常
【发布时间】:2025-12-07 12:20:03
【问题描述】:

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

这是对我之前使用此 SQL cmd 的 Python 代码的改编

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

【问题讨论】:

  • 真的确定您的Article_IDHW_Revision_ID 列不是数字吗?根据他们的名字,他们应该..
  • 是的,我确定。它们都可以是字母数字,在我的旧 Python 代码中,它们一直被视为字符串

标签: c# sql ms-access oledb


【解决方案1】:

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

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

WHERE [Article_ID] = asdf4711

这对字符串无效。

你可以使用撇号

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      string  query = "SELECT * FROM HW_Revision WHERE Article_ID =" + article  + " AND HW_Revision_ID = " + HWRev;
      
      var HW_RevrTest = cur.execute(query);
      

      【讨论】:

        最近更新 更多