【问题标题】:Microsoft ACE OLEDB 12.0 - F1 syntax for headerless .CSV causes exceptionMicrosoft ACE OLEDB 12.0 - 无标题 .CSV 的 F1 语法导致异常
【发布时间】:2014-12-22 10:43:36
【问题描述】:

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

我没有更改传递给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 语法来获取第一列。

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

【问题讨论】:

    标签: c# csv oledb oledbcommand aceoledb


    【解决方案1】:

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

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

    除了[],您也可以使用''

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

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

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

    【讨论】:

    • 是的,这修复了它。问题来自在 from 子句中使用完整的文件路径 - 当您将 from 子句括在方括号中时,这在“From Clause”异常中明显突出显示。只需要指定文件名。
    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多