【发布时间】:2016-07-20 02:54:26
【问题描述】:
我正在使用ODBC 从CSV 文件中进行查询。 CSV 文件包含列名(CSV 文件的第一行),其中一些包含空格。
我正在使用 C# 使用 OdbcCommand 对象执行查询(SQL SELECT 语句)
如果我什么都不做,我会收到一个 ODBC 错误,Syntax error (missing operator) in query expression '[column name here]'([此处的列名] 表示它只是将第一列的名称放入其中,其中包含空格)。
我尝试将列名括在方括号中,比如 SQL Server,但没有骰子。我试过双引号,我试过反引号。我试过撇号。
如果我使用其中任何一个,我会收到一条错误消息,指出 Too few parameters. Expected X 其中 X 是 1 或 3,具体取决于换行符。
我似乎在 CSV 文件中找不到任何指定如何执行此操作的内容。
它适用于列名中没有空格的 CSV 文件。
更新 1: 根据此 Microsoft 页面:https://msdn.microsoft.com/en-us/library/ms709353(v=vs.85).aspx
在列名的remarks 部分下,它显示“列的文本名称。如果列名包含嵌入的空格,则必须将其括在双引号中。”如前所述,我已经尝试过了。没用。
根据此 Microsoft 页面:https://msdn.microsoft.com/en-us/library/ms711819(v=vs.85).aspx 它说,“如果列名包含除字母、数字和下划线以外的任何字符,则必须通过将其括在反引号 (`) 中来分隔名称。”试过了。没用。
我正在使用 Microsoft 文本驱动程序(根据 ODBC 数据源管理器的用户 DSN 页面),但我没有在 ODBC 驱动程序页面上看到它。在该页面上,我看到了 SQL Server、SQL Server Native Client 和 ODBC Driver 11 for SQL Server(版本 2015.130.900.73)。
【问题讨论】:
-
为什么不使用 System.IO StreamReader ?它工作得很好,如果你愿意,我可以给你这样做的代码(完全测试工作) - 对于 CSV 文件。
-
@KyleE4K 你的代码能让我对 CSV 文件执行 SQL 查询吗?
-
它既不是 ODBC 也不是 SQL 原语,它只是读取每一列并将它们存储为行,就像 select 语句一样。然后你可以在上面添加你的 SQL 吗?
-
@KyleE4K 我需要一些可以执行 SQL 的东西。谢谢。
-
您是否厌倦了在 SQL 查询中使用
REPLACE()查询空格?以前从未见过这种行为,请向我们展示您的代码?我为你投票