C# 使用ODBC从列名中带有空格的CSV文件中进行选择

C# 使用ODBC从列名中带有空格的CSV文件中进行选择,c#,sql,csv,odbc,C#,Sql,Csv,Odbc,我正在使用ODBC从CSV文件进行查询。CSV文件包含CSV文件第一行的列名,其中一些列名中有空格 我使用C使用OdbcCommand对象执行SQL SELECT语句的查询 如果我什么也不做,我会得到一个ODBC错误,语法错误查询表达式“[column name here]”[column name here]中缺少运算符意味着它只会输入第一列的名称,其中包含空格 我尝试过将列名用方括号括起来,即SQL Server,但没有骰子。我试过双引号,我试过反引号。我试过撇号 如果我使用其中任何一个,我

我正在使用ODBC从CSV文件进行查询。CSV文件包含CSV文件第一行的列名,其中一些列名中有空格

我使用C使用OdbcCommand对象执行SQL SELECT语句的查询

如果我什么也不做,我会得到一个ODBC错误,语法错误查询表达式“[column name here]”[column name here]中缺少运算符意味着它只会输入第一列的名称,其中包含空格

我尝试过将列名用方括号括起来,即SQL Server,但没有骰子。我试过双引号,我试过反引号。我试过撇号

如果我使用其中任何一个,我会得到一个错误,即参数太少。应为X,其中X为1或3,具体取决于换行字符

我似乎找不到任何指定如何在CSV文件中执行此操作的内容

它适用于列名中没有空格的CSV文件

更新1:根据此Microsoft页面: 在列名称的备注部分,列的文本名称。如果列名包含嵌入的空格,则必须用双引号将其括起来。如前所述,我已经试过了。没用

根据此Microsoft页面: 它说,如果列名包含字母、数字和下划线以外的任何字符,则必须通过将其括在后引号中来分隔该名称。尝试没用


根据ODBC数据源管理员的用户DSN页面,我正在使用Microsoft文本驱动程序,但在ODBC驱动程序页面上没有列出它。在该页面上,我看到了SQL Server 2015.130.900.73版的SQL Server、SQL Server本机客户端和ODBC驱动程序11。

以下是我创建的一个运行良好的示例。我没有使用DSN,但它给了你一个想法

数据源sampledata.csv 第1栏、第2栏、第3栏 一些值,3,0.01 另一个值,1,1.2 再一次,2,3

schema.ini [sampledata.csv] 格式=CSVDelimited ColNameHeader=True Col1=第1列文本 Col2=第2列的长度 Col3=第3列货币

代码 在schema.ini中,列名周围使用引号。在查询中,括号的使用与常规SQL语句类似


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

为什么不使用System.IO StreamReader?它工作得很好,我可以给你一段代码,如果你想要的话,它经过充分测试,可以工作。@KyleE4K你的代码可以让我对CSV文件执行SQL查询吗?它不是ODBC或SQL原语,它只是像select语句一样读取每一列并将它们存储为行。你可以在上面添加你的SQL吗?@KyleE4K我需要一些可以执行SQL的东西。谢谢。您是否厌倦了在SQL空间查询中使用替换?以前从未见过这种行为,给我们看看你的代码?我投了你的票
     string filePath = Path.GetDirectoryName(Application.ExecutablePath);
     string fileName = "sampledata.csv";
     string query = string.Empty;

     //query = "SELECT * FROM " + fileName;
     //query = "SELECT * FROM " + fileName + " WHERE [COLUMN 2] > 1";
     query = "SELECT * FROM " + fileName + " WHERE [COLUMN 3] > 0.02";

     // 32-bit
     // OdbcConnection conn = new OdbcConnection("Driver=Microsoft Text Driver (*.txt, *.csv);Dbq=" + filePath + ";Extensions=csv;");
     // 64-bit
     OdbcConnection conn = new OdbcConnection("Driver=Microsoft Access Text Driver (*.txt, *.csv);Dbq=" + filePath + ";Extensions=csv;");
     conn.Open();
     OdbcCommand cmd = new OdbcCommand(query, conn);
     OdbcDataAdapter adapter = new OdbcDataAdapter(cmd);
     DataSet mydata = new DataSet("CSVData");
     adapter.Fill(mydata);
     conn.Close();
     conn.Dispose();

     dataGridView1.AutoGenerateColumns = true;
     dataGridView1.DataSource = mydata;
     dataGridView1.DataMember = mydata.Tables[0].ToString();