尝试使用第三方组件读取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的专家,但我的印象是驱动程序处于操作系统级别,如果它们适用于一个应用程序/连接字符串,则它们应适用于具有相同连接字符串的所有应用程序。我错了吗?如果是这样,有没有人知道这里发生了什么?
我已联系过该组件的支持。
答案 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
单引号没有问题,但显然有些应用和组件可以。