3

当我在 64 位系统上启动程序时,我正在从使用“Microsoft.Jet.OLEDB.4.0”提供程序切换到“Microsoft.ACE.OLEDB.12.0”,并且我了解 ACE 已取代 Jet 为 64 位利用。

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

“没有为一个或多个必需参数提供值。”

代码如下:

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语法来获取第一列。

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

4

1 回答 1

1

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

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

代替[]你也可以使用''

而且我不确定你是否只是为了一个临时问题而编写了这个代码片段,但我建议你用类似的东西来管理你的字符串

string sql = string.Format("SELECT [{0}] FROM [{1}]", myColumnVar, myTableVar);

如果更复杂,请考虑参数化您的查询。请参阅如何参数化复杂的 OleDB 查询?例如。

于 2014-12-23T06:02:21.253 回答