gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:38:47 25 4
gpt4 key购买 nike

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

我正在使用 C# 使用 OdbcCommand 对象执行查询(一个 SQL SELECT 语句)

如果我什么都不做,我会得到一个 ODBC 错误,查询表达式 '[column name here]' 中的语法错误(缺少运算符)([column name here] 意味着它只是输入名称第一列中有空格)。

我试过将列名称括在方括号中,就像 SQL Server 一样,但没有成功。我试过双引号,我试过反引号。我试过撇号。

如果我使用其中任何一个,我都会收到一条错误消息,提示 参数太少。应为 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)。

最佳答案

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

数据源(sampledata.csv)

COLUMN 1,COLUMN 2,COLUMN 3
Some value,3,0.01
Another value,1,1.2
Yet again,2,3

架构.ini

[sampledata.csv]
Format=CSVDelimited
ColNameHeader=True
Col1 = "COLUMN 1" Text
Col2 = "COLUMN 2" Long
Col3 = "COLUMN 3" Currency

代码

     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();

在 schema.ini 中,列名称两边使用引号。在查询中,括号的使用就像一个普通的 SQL 语句。

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

关于c# - 使用 ODBC 从列名中包含空格的 CSV 文件中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36337031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com