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