c# - Microsoft ACE OLEDB 12.0 - 无 header .CSV 的 F1 语法导致异常

标签 c# csv oledb oledbcommand aceoledb

我正在从使用“Microsoft.Jet.OLEDB.4.0”提供程序切换到“Microsoft.ACE.OLEDB.12.0”,因为我在 64 位系统上启动我的程序,我知道 ACE 已经取代了 Jet 64 位使用。

我没有更改传递给 OleDbCommand 的查询语法,但它现在导致异常:

"No value given for one or more required parameters."

代码如下:

static void Main(string[] args)
{
    const string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\PimsImport\\PreciousStore\\imports;Extended Properties='Text;HDR=NO;IMEX=1'";
    const string selectStatement = "SELECT F1 AS NameColumn FROM C:\\PimsImport\\PreciousStore\\imports\\PIMSPreciousbradypxx.csv";

    using (var connection = new OleDbConnection(connectionString))
    {
        using (var cmd = new OleDbCommand(selectStatement, connection))
        {
            cmd.Connection.Open();
            OleDbDataReader workbookReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            workbookReader.Close();
        }
    }
}

如果我删除F1,并替换为*;它工作正常。但是我的 csv 没有标题,所以我想使用 F1 语法来获取第一列。

知道为什么这不再有效吗?

最佳答案

在您的选择中尝试进行以下更改

"SELECT [F1] AS NameColumn FROM [myTable]"

您也可以使用 '' 而不是 []

而且我不确定您是否只是为了临时问题而编写此代码片段,但我建议您使用类似

的方式来管理您的字符串
string sql = string.Format("SELECT [{0}] FROM [{1}]", myColumnVar, myTableVar);

如果更复杂,请考虑参数化您的查询。引用How to parameterize complex OleDB queries?举个例子。

关于c# - Microsoft ACE OLEDB 12.0 - 无 header .CSV 的 F1 语法导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601082/

相关文章:

javascript - Ajax Minifier (AjaxMin) - JavaScript 的 EvalTreatment?

c# - 通过网络复制文件(需要身份验证)

Powershell 哈希表导出为 CSV

javascript - 在 UI 上解析上传的 CSV 文件(约 8GB)时,在内存中存储非常大的 JSON 对象

ms-access - Microsoft.ACE.OLEDB.12.0 Provider 无法再在 Windows 8 下打开 .mdb

sql-server - ODBC、OLEDB 和 ADO.NET 的底层协议(protocol)有区别吗

c# - HttpClient Parallel Requests Timeout using Task.WhenAll 当一个请求超时

c# - 在 Xamarin.Forms 中获取 ListView 的选定项的 ID

ruby-on-rails - Ruby 未定义方法 `[]' 为 nil :NilClass (NoMethodError) error

c# - 选择和插入命令 OLEDB 命令 c#