System.Data.OleDb.OleDbException - sql 中的语法错误

System.Data.OleDb.OleDbException - syntax error in sql

提问人:Noa Zakai 提问时间:7/22/2023 最后编辑:marc_sNoa Zakai 更新时间:7/27/2023 访问量:44

问:

我在这个 SQL 中有一个语法错误:

string sSql = $"SELECT OxygenTankInDetailTBL.HBedNameID, 
                       OxygenTankInDetailTBL.LocationHB 
                FROM OxygenTankInDetailTBL 
                INNER JOIN SectionsNameTBL ON (SectionsNameTBL.SectionID = OxygenTankInDetailTBL.LocationHB 
                                           AND SectionsNameTBL.LocationG = '{locationG}') 
                INNER JOIN OxygenTankTBL ON (OxygenTankTBL.HBedID = OxygenTankInDetailTBL.HBedNameID 
                                         AND OxygenTankTBL.IsActive= {true});"; 

错误是:

System.Data.OleDb.OleDbException: '查询表达式中的语法错误(缺少运算符)'(SectionsNameTBL.SectionID = OxygenTankInDetailTBL.LocationHB AND SectionsNameTBL.LocationG = 'agaf1') INNER JOIN OxygenTankTBL ON(OxygenTankTBL.HBedID = OxygenTankInDetailTBL.HBedNameID AND OxygenTankTBL.IsActive= True'.'

谢谢

C# SQL 语法错误

评论

1赞 marc_s 7/22/2023
为什么要“标记我的 RDBMS”?- 请添加一个标签,以指定您使用的是 、 、 或 - 还是其他完全不同的东西。mysqlpostgresqlsql-serveroracledb2
1赞 Hans Kesting 7/22/2023
请不要对 sql 命令使用字符串连接,使用真实参数(查找“sql 注入”)
0赞 Hans Kesting 7/22/2023
您确定对您的 DBMS 有效吗?OxygenTankTBL.IsActive= True
1赞 jdweng 7/22/2023
为什么使用 oledb 而不是 SQLClient 库?这两个库的查询语句可能不同。尝试将连接字符串更改为 SQLClient 库。
0赞 SoftwareDveloper 7/23/2023
您是否可能缺少 LocationHB 和/或 HBedNameID 周围的单引号?

答:

0赞 ValNik 7/27/2023 #1

如果 DBMS 是 MS Access,请参阅此示例。
我想,您可以在 JOIN 操作中加入 1 个表或 subQuery。将其他联接包装在子查询中。

SELECT *
FROM SectionsNameTBL 
RIGHT JOIN (
       OxygenTankTBL RIGHT JOIN OxygenTankInDetailTBL 
        ON OxygenTankTBL.HBedID = OxygenTankInDetailTBL.HBedNameID
   ) 
  ON SectionsNameTBL.SectionID = OxygenTankInDetailTBL.LocationHB
WHERE SectionsNameTBL.LocationG = 'agaf1'
  AND OxygenTankTBL.IsActive= true
;