我为我的访问数据库构建了一个复杂的查询,在访问中它就像一个魅力。但是当我尝试通过OleDB在我的程序中运行相同的查询时,我得到异常“加入操作中的语法错误”。没有进一步的信息。
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 >= ?;
我已经打破了查询,因为我觉得它仍然具有代表性。我使用子选择而不是直接连接的原因是我需要多次加入我的键值表以将不同的键放入不同的列。我无法以任何其他方式工作。
我正在使用C#2.0和Visual Studio 2008,以防相关。
答案 0 :(得分:1)
发现问题。我输入查询的方式打破了它......
编辑:正如您所看到的,我将查询分布在多行上,因此更容易阅读。当我将其粘贴到我的源代码中时,发生了这种情况:
"SELECT FooField" +
"FROM BarTable;";
导致“SELECT FooFieldFROM BarTable;” - 显然不是有效的语法,这很痛苦。我刚才没有意识到......
答案 1 :(得分:0)
这肯定是一个令人困惑的消息。有什么不对的是额外的逗号:
D0.Value AS ["Value"], <-- here
我希望这些名称不是真正的字段(列)名称,因为值和时间是保留字,会导致无穷无尽的问题。我建议至少你把它们放在方括号中,如果它们是真名。