我有一个ASP经典应用程序,我从Windows 2000迁移到Windows 2012 Server。
它使用以下代码导入xls文件
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "DRIVER={Microsoft Excel Driver (*.xls)}; IMEX=1; HDR=NO; Excel 8.0; DBQ=" & Server.MapPath("\Imports\") &"\"&fn& "; "
以及csv文件的以下内容
Set objConn = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPathtoCSVFile & ";Extended Properties=""text;HDR=YES;FMT=Delimited"""
根据此问题的答案Excel ODBC and 64 bit server,我下载并安装了Microsoft Access Database Engine 2010 Redistributable。
我已经尝试了上述的32位和64位版本,但除非我更改应用程序池设置启用32位应用程序为True,否则它们都不起作用。如果设置为False,我会收到以下错误。
Microsoft OLE DB Provider for ODBC Drivers error' 80004005'
[Microsoft] [ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序
不幸的是,将其设置为True会破坏该网站另一部分的PDF渲染。
到目前为止,我唯一可行的选择是在它自己的32位应用程序池下设置这个部分。
如何在64位应用程序池中运行它?
编辑:在有人带着笨锤之前,一个无法解决问题的相关问题是 ASP running in 64 bits environment with Access database
答案 0 :(得分:2)
首先,确保成功安装64位软件包AccessDatabaseEngine_x64.exe。
之后,使用以下连接字符串。
使用64位应用程序池时不应再出现问题。
'Excel 97-2003
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\my\path\to\tables.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";"
Set Recordset = Connection.Execute("Select * From [Sheet1$]")
'CSV / TXT
Connection.Open _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\my\path\to\csv_dir\;Extended Properties=""text;HDR=YES;FMT=Delimited"";"
Set Recordset = Connection.Execute("Select * From table.csv")
connectionstrings.com一直是连接字符串的好参考。