初始化字符串的格式不符合OLE DB规范

时间:2015-05-14 07:37:21

标签: c# excel oledb

尝试使用第三方组件读取Excel文件时出现以下错误

  

初始化字符串的格式不符合OLE DB规范

现在,我知道“第三方组件”这个词会在这里引起警钟,但是听我说。

这是我正在使用的连接字符串

using (OleDbConnection conn = new OleDbConnection())
{
    DataTable dt = new DataTable();
    conn.ConnectionString = connstring;
    using (OleDbCommand comm = new OleDbCommand())
    {
        comm.CommandText = "select * from [TEST_DB$]"; 
        // TEST_DB is the name of the sheet
        comm.Connection = conn;
        using (OleDbDataAdapter da = new OleDbDataAdapter())
        {
            da.SelectCommand = comm;
            da.Fill(dt);
            // do stuff with dt
        }
    }
}

我已经有了这个完全连接字符串,可以使用以下C#代码没有问题

    select room_no FROM roominfo WHERE room_no NOT IN (select roomno from guestrocordtransac where roomtype='".$roomtype."' between '".$check_in."'  and '".$check_out."'
) and roomtype='".$roomtype."'

这可以按预期工作,数据表中填充了Excel文件中的数据。但是,当我尝试从组件访问它时,我得到上面的错误。

我不是OLE DB的专家,但我的印象是驱动程序处于操作系统级别,如果它们适用于一个应用程序/连接字符串,则它们应适用于具有相同连接字符串的所有应用程序。我错了吗?如果是这样,有没有人知道这里发生了什么?

我已联系过该组件的支持。

1 个答案:

答案 0 :(得分:2)

此解决方案最终是用转义双打替换单引号。

 string conn = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
 "Data Source=C:\users\rory\downloads\testdb_4.xls;" + 
 "Extended Properties='Excel 8.0;HDR=YES;'"; // single quotes

成了

 string conn = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
 "Data Source=C:\users\rory\downloads\testdb_4.xls;" + 
 "Extended Properties=\"Excel 8.0;HDR=YES;\""; // escaped double quotes

OleDbConnection单引号没有问题,但显然有些应用和组件可以。