使用ODBC从包含列名称空格的CSV文件中进行选择

时间:2016-03-31 14:58:26

标签: c# sql csv odbc

我使用ODBCCSV文件进行查询。 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)。

1 个答案:

答案 0 :(得分:1)

这是我创建的一个可以正常工作的示例。我没有使用DSN,但它会给你一个想法。

数据源(sampledata.csv)

  

第1栏,第2栏,第3栏   有些价值,3,0.01
  另一个值,1,1.2
  再次,2,3

SCHEMA.INI

  

[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语句。

每个查询都按预期在网格中加载数据。