【发布时间】:2019-04-05 10:51:35
【问题描述】:
一直在尝试在这里找到语法错误,sql 似乎被正确隔开,并且变量正在从我的数据库和其他预期的形式中读取。
clsDBConnector dbConnector = new clsDBConnector();
OleDbDataReader dr;
dbConnector.Connect();
string sqlStr1 = "SELECT ItemID" +
" FROM TblItem" +
" WHERE ([Item Name]= " + ItemName + ")";
dr = dbConnector.DoSQL(sqlStr1);
while (dr.Read())
{
string ItemID = dr[0].ToString();
string sqlStr2 = "SELECT TOP 1 OrderItemID" +
" FROM TblOrderItem" +
" WHERE(OrderID =" + orderID + ") AND(ItemID =" + ItemID +")";
dr = dbConnector.DoSQL(sqlStr2);
while (dr.Read())
{
string OrderItemID = dr[0].ToString();
string sqlStr3 = "DELETE FROM TblOrderItem" +
" WHERE (OrderItemID =" + OrderItemID + ")";
dr = dbConnector.DoSQL(sqlStr3);
}
}
【问题讨论】:
-
应该会抛出异常。你读过这个异常信息吗?
-
[Item Name]建议它是一个(n)(var)char列,这意味着值应该用引号括起来。 -
除了您遇到的任何异常,我非常强烈建议您更改您处理 SQL 的一般方式。使用参数化 SQL 来: 1) 避免 SQL 注入攻击; 2) 避免转换问题; 3) 让代码更清晰易读。
-
除了建议您参数化查询之外,您是否尝试过使用 ' 转义变量,所以 WHERE([Item Name] = '" + ItemName + "'.
-
向我们展示最终的 SQL 字符串。