OLEDB + JET:加入操作中的语法错误
-
04-10-2019 - |
题
我为访问数据库构建了一个复杂的查询,并且在访问中的工作方式就像魅力一样。但是,当我尝试通过OLEDB在程序中运行相同的查询时,我会得到异常“ JOIN操作中的语法错误”。没有其他信息。
SELECT
MainTable.Main_dbID,
D0.Kvp_Value AS ["Value"]
FROM (MainTable
INNER JOIN (
SELECT Main_dbID, Kvp_Value
FROM KVPTable
WHERE Kvp_Code IN (1, 2, 4)
) AS D0
ON D0.Main_dbID = MainTable.Main_dbID)
WHERE Main_Time <= ? AND Main_Time >= ?;
就我觉得它仍然是代表性的,我已经打破了查询。我使用subsect而不是直接加入的原因是,我需要多次加入我的钥匙值表以将不同的键放入不同的列中。我无法做到其他任何方式。
如果相关,我正在与C#2.0和Visual Studio 2008合作。
解决方案
找到了问题。我进入查询的方式打破了...
编辑:如您所见,我在多行上分发了查询,因此阅读更容易。当我将其粘贴到我的源代码中时,发生了这种情况:
"SELECT FooField" +
"FROM BarTable;";
这会导致“选择foofieldfrom Bartable”; - 因此显然是没有有效语法的,这很痛苦。我只是没有首先意识到...
其他提示
当然,这是一个令人困惑的信息。额外的逗号是什么问题:
D0.Value AS ["Value"], <-- here
我希望这些名称不是真实字段(列)名称,因为价值和时间是保留的单词,并且会导致无尽的问题。我建议至少如果它们是真实的名称,则至少您将它们包裹在方括号中。
不隶属于 StackOverflow