我使用ODBC
从CSV
文件进行查询。 CSV
文件包含列名(CSV
文件的第一行),其中一些文件中包含空格。
我使用C#使用OdbcCommand
对象执行查询(SQL SELECT语句)
如果我什么都不做,我收到一个ODBC错误,Syntax error (missing operator) in query expression '[column name here]'
([此处的列名]意味着它只是放入第一列的名称,其中包含空格。)
我尝试在方括号中包装列名,ala 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和SQL Server的ODBC驱动程序11(版本2015.130.900.73)。
答案 0 :(得分:1)
这是我创建的一个可以正常工作的示例。我没有使用DSN,但它会给你一个想法。
第1栏,第2栏,第3栏 有些价值,3,0.01
另一个值,1,1.2
再次,2,3
[sampledata.csv]
格式= CSVDelimited
ColNameHeader =真
Col1 =" COLUMN 1"文字
Col2 ="第2列和第34列;龙
Col3 ="第3列"货币
typedef void(*fp)(const myClass& object);
class myClass{
private:
char statement[100];
void (*_pointer)(const myClass& object);
public:
void setStatement(char *sequence){strcpy(statement,sequence);}
void setPointer(void (*_pointerToFunction)(const myClass& object)) {_pointer = _pointerToFunction;}
fp getFunction() {return _pointer;}
void showStatement() {cout << statement << " ";}
};
在schema.ini中,在列名称周围使用引号。在查询中,括号用作常规SQL语句。
每个查询都按预期在网格中加载数据。