C#连接MS Access三张表时提示‘查询表达式缺少操作符’
问题解决:Access多表连接“查询表达式缺少操作符”错误
错误原因
Access的Jet SQL语法和标准SQL存在差异,多表连续使用INNER JOIN时,必须用括号嵌套前两个表的连接结果,再与第三个表进行连接。另外Key是Access的保留字,直接作为字段名使用会触发语法错误,需要用方括号[]包裹。
修正后的SQL语句(Access直接运行)
SELECT Products.ProductName, Keys.[Key], Keys.Active, Transactions.Total, Transactions.TransactionDate FROM (Keys INNER JOIN Transactions ON Keys.TransactionID = Transactions.TransactionID) INNER JOIN Products ON Transactions.ProductID = Products.ProductID WHERE Transactions.UserID = 20
C#中修正后的代码(推荐参数化查询)
直接拼接SQL字符串存在SQL注入风险,建议改用参数化查询:
command.CommandText = @" SELECT Products.ProductName, Keys.[Key], Keys.Active, Transactions.Total, Transactions.Date FROM (Keys INNER JOIN Transactions ON Keys.TransactionID = Transactions.TransactionID) INNER JOIN Products ON Transactions.ProductID = Products.ProductID WHERE Transactions.UserID = @UserID"; command.Parameters.AddWithValue("@UserID", UserID); OleDbDataReader reader = command.ExecuteReader();
关键注意事项
- 多表JOIN时,必须用括号包裹前两个表的连接结果,再与第三个表关联
- 当字段名/表名是Access保留字时,必须用
[]包裹,比如Keys.[Key] - 优先使用参数化查询替代字符串拼接,避免SQL注入漏洞
内容的提问来源于stack exchange,提问作者Milosz Wedrowski
相关产品推荐
相关产品推荐

