C# 列名为number,使用oledb选择它

C# 列名为number,使用oledb选择它,c#,csv,oledb,C#,Csv,Oledb,类似问题: 我在csv文件中有一列的名称为0.000。如何使用oledb select语句选择它?目前我有: StringBuilder sbSelectItems = new StringBuilder(); sbSelectItems.Append("location_c, "); sbSelectItems.Append("impb_, "); sbSelectItems.Append("order_id, "); sbSelectItems.Append(" `0.000` as shi

类似问题:

我在csv文件中有一列的名称为0.000。如何使用oledb select语句选择它?目前我有:

StringBuilder sbSelectItems = new StringBuilder();
sbSelectItems.Append("location_c, ");
sbSelectItems.Append("impb_, ");
sbSelectItems.Append("order_id, ");
sbSelectItems.Append(" `0.000` as shipCost, ");
sbSelectItems.Append("transmitta, ");
sbSelectItems.Append("piecelb ");

string sSelectStatement = "SELECT " + sbSelectItems.ToString() + " FROM [" + sFileName + "]";
但是我得到一个错误,它不是一个有效的列。我已经尝试了[0.000]、'0.000',0.000以及我目前拥有的内容,我得到了文本值或针对无效列引发的错误。该文件是通过我无权访问的程序自动生成的,因此我无法更改列名

更新

尝试第一个答案中的示例,我得到一个错误,表示没有为一个或多个必需参数提供值。所以我很困惑,选择了。。。当我这样做的时候,列名是tr110308csv.01。我尝试选择值,然后执行tr110308csvcsv.01,但无法选择

同时使用0000也不起作用

62是我想要的专栏


尝试将select语句中的列名更改为0000。这是一个试图复制并修复您的问题的示例

给定包含以下内容的CSV文件:

Foo,Bar,100.0,200
Alpha,Happy,8,5
Beta,Sad,19,2
表单的Select语句

"Select Foo, `100.0` From "
接收带有消息的OLEDBEException

不是有效的名称。确保它不包含无效字符或标点符号,并且不太长

…与您收到的错误相匹配,或者,我想是的,您缩写并更改了消息

将select更改为1000可以避免此问题

完整复制代码:

string fileName = "C:\\Temp\\test.csv";
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"TEXT;HDR=YES;FMT=Delimited\";",    Path.GetDirectoryName(fileName));

using (var connection = new System.Data.OleDb.OleDbConnection(connectionString)) 
{
    string sql = "Select Foo, `100#0` From " + Path.GetFileName(fileName);
    using (var adapter = new System.Data.OleDb.OleDbDataAdapter(sql, connection)) 
    {
        var table = new DataTable();
        var result = adapter.Fill(table);
        table.Dump(); // LinqPad method to display result for verification
    }
}
您将注意到输出中的列名与select语句匹配,尽管您仍然可以像原始SQL尝试的那样将其命名为别名。事实上,这里的发现方法就是简单地执行Select*From。。。并检查输出。我事先没有找到任何原始资料,所以这个问题很有趣


编辑:对于您的更新,同样的方法也适用。名称tr110308csvcsv.01对于select语句是不合法的,但名称tr110308csvcsv01是合法的。在测试文件中重命名列以匹配您的列,然后在代码中使用更改后的版本会产生所需的输出,我建议您在代码中也尝试使用它。

您确定“是正确的符号吗?”?难道不是吗。我的意思是,您正试图选择文本0.000作为一个名为shipCost的列,不是吗?使用“提供文本值”。我试图获取名为0.000的列,并将其重命名为shipCost,以便在我的datatable中,列名为shipCost。如果你看代码下面,你会发现我已经试过了。那么方括号呢?[0.000]asshipCost@PedroC88,问题文本中已经有他尝试使用方括号,以及单引号、双引号和反勾号。检查我的更新。我相信你的解决方案是可行的,但我的列名似乎不是我想象的那样。@Brett,在本地,我在CSV中更新了我的列名以匹配你的列名,并将复制代码更新为tr110308csvcsv01,并且能够成功执行。试试看。