解决Windows Server2008R2中导入Excel不能使用Jet 4.0

操作系统使用了Windows Server2008R2(Windows Server2008R2是64位系统,同时配置IIS7.0

原读取Excel文件代码为:

string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'", FilePath);
OleDbDataAdapter ExcelDA = new OleDbDataAdapter(“SELECT * FROM [" + strSheet + "$]“, strConn);

DataSet dstExcel = new DataSet();
ExcelDA.Fill(dstExcel, “ExcelInfo”);

在Windows Server2003上一切正常,64位服务器上就不正常了,查找资料说,可以把将应用程序池的Enable 32 bit选项设为True,但IIS的稳定性和兼容性不太好。

但是实际操作中改应用池32位为True也不行。

 

解决方法一:

再查资料使用Microsoft.ACE.OLEDB对Excel进行操作。修改后的脚本如下:

string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES'", FilePath);
DataSet dstExcel = new DataSet();
ExcelDA.Fill(dstExcel, “ExcelInfo”);

注意’Excel 12.0;HDR=YES’处的单引号不能少。

测试后发现,应用程序池的Enable 32 bit选项设为True加上这个链接方式就正常使用了。

解决方法二:

装一个“AccessDatabaseEngine_X64”驱动程序,就不用修改程序池选项,再使用“Microsoft.ACE.OLEDB”链接字符串。

 

在我的程序中我判断了一下操作系统的位数,来自动切换相应的链接字符串。 

Environment.Is64BitOperatingSystem

 

posted @ 2016-08-03 14:17  coolsundy  阅读(1464)  评论(0编辑  收藏  举报