【问题标题】:ASP Classic Text Driver For Windows 2012适用于 Windows 2012 的 ASP 经典文本驱动程序
【发布时间】:2015-02-03 16:16:44
【问题描述】:

我们有一个旧的 ASP Classic 网站,它一直在 Windows 2003 上运行,需要迁移到 2012 年。

该网站的大部分工作都与我们需要能够将充满类别的 CSV 或 Excel 文档上传到服务器的部分分开。

我知道在 Windows 2008 时不存在 Microsoft 驱动程序,这就是为什么我们不得不在 2003 年离开该站点这么久,但我们现在正试图通过以下方式解决这个问题 - 为 Windows 2012 找到正确的 MS Text/CSV/XLS 驱动程序 - 购买一个组件来为我们完成这项工作

搜索后发现这篇 MS 知识库文章 > http://www.microsoft.com/en-us/download/details.aspx?id=13255

这说明它应该可以完成这项工作,但是当我使用从知识库文章中获得的以下代码上传 Excel 时

Set objConnectionCSV    = Server.CreateObject("ADODB.Connection")       
Set objCSVRecs      = Server.CreateObject("ADODB.Recordset")

'* Get path and extension of uploaded file - earlier on using ASPUpload
strPath = objFile.Path
strExt  = lcase(Right(strPath,Len(strPath)-InStrRev(strPath,".")))  

'* try with new driver code
With objConnectionCSV
.Provider = "Microsoft.ACE.OLEDB.12.0"              

'* it errors on this line!
.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & strPath & ";"""

'* old code which I don't get to which required data to be on sheet 1
On Error Resume Next
Set objCSVRecs = .Execute("[Sheet1$]") 
If Err.number <> 0 Then
    strErrMessage   = "Error opening file: " & Err.number & " " & Err.Description & ";"
    Err.Clear                       
End If
End With

我得到这个错误就行了

.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & strPath & ";"""

Microsoft Access 数据库引擎错误“80004005”

找不到可安装的 ISAM。

这是正确的文本驱动程序吗?

是否需要做其他事情,例如 IIS 设置或不同的代码?

我们已经重新启动了 IIS 并使用了权限,它在 64 位模式下运行。

是否有人对此问题有解决方案或知道解决方法,例如我可以使用/购买的组件,因为此时我不想自己开始在 ASP 经典中编写文件解析器。

即使我只能处理 CSV 文件而不是 XLS、XLSX 等,那也足够了,但我只需要知道要使用的代码、正确的连接字符串以及要在 IIS 中安装或设置的任何内容。

提前感谢您的帮助。

【问题讨论】:

    标签: iis asp-classic driver xls windows2012


    【解决方案1】:

    看起来 OLEDB 和 ODBC 正在同时使用。

    OLEDB

    .Provider = "Microsoft.ACE.OLEDB.12.0"              
    

    ODBC

    .Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & strPath & ";"""
    

    由于这些数据源 API 完全不同并且完成相同的任务。这是 StackOverflow 的 answer,它讨论了这些差异。

    删除或注释掉这一行。

    .Provider = "Microsoft.ACE.OLEDB.12.0" 
    

    更新

    替换

    Set objCSVRecs = .Execute("[Sheet1$]") 
    

    有了这个

    Set objCSVRecs = .Execute("SELECT * FROM [Sheet1$]")
    

    以下代码是在 Windows 2012 R2 VM 上设置的。

    鉴于:为此演示创建了一个包含字段 id、LastName、FirstName 的 Excel 电子表格。

    <%
    Set objConnectionCSV    = Server.CreateObject("ADODB.Connection")       
    Set objCSVRecs      = Server.CreateObject("ADODB.Recordset")
    
    'Important: Be sure your strPath variable contains a value. For testing purposes, I hard coded a value.
    strPath = objFile.Path
    strExt  = ".xlsx"  
    
    'Opening tags for asp page
    response.write "<html><body>"
    
    With objConnectionCSV  
        .Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & strPath & ";"""
    
        On Error Resume Next
        Set objCSVRecs = .Execute("select * from [Sheet1$]") 
    
        Do While Not objCSVRecs.EOF
                response.write "Data row: " & objCSVRecs("id").Value & " Name = " &  objCSVRecs("LastName").Value & ", " & objCSVRecs("FirstName").Value & "<br/>" 
            objCSVRecs.MoveNext
        Loop
    
        If Err.number <> 0 Then
            strErrMessage   = "Error opening file: " & Err.number & " " & Err.Description & ";"
            Err.Clear                       
        End If
    End With
    
    'End tags for asp page
    response.write "</body></html>"
    %>
    

    结果

    【讨论】:

    • 我厌倦了,但仍然收到错误“-2147217900 [Microsoft][ODBC Excel 驱动程序] SQL 语句无效;预期为“DELETE”、“INSERT”、“PROCEDURE”、“SELECT”或“更新'"
    • 我已经尝试按照文章的建议使用 CommandText,并删除了 Provider 并尝试了所有 3 个语句,因为我不知道应该使用什么语法。只是在旧驱动程序上,我必须从 sheet1 中选择它才能工作 >>>> 使用 objConnectionCSV .Open "Driver={Microsoft Excel Driver (.xls, *.xlsx, *.xlsm, *.xlsb) };DBQ=" & strPath & ";""" ' 这里有错误'.CommandText = "SELECT * FROM [" & objFile.FileName & "];" '.CommandText = "SELECT * FROM [" & objFile.FileName & "][Sheet1$];" .CommandText = "SELECT * FROM [Sheet1$];"设置 objCSVRecs = .Execute End With
    • 我收到“Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Excel Driver] 'Sheet1$' 不是有效名称。确保它不包含无效字符或标点符号,并且不会太长。”
    • 现在使用此代码,将命令对象拆分为具有指向它的 ADO 连接字符串对象,例如 >>> Set objCommandCSV = Server.CreateObject("ADODB.Command") Set objConnectionCSV = Server.CreateObject("ADODB.Connection") Set objCSVRecs = Server.CreateObject("ADODB.Recordset") With objConnectionCSV .Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & strPath & ";""" 以 objCommandCSV .ActiveConnection = objConnectionCSV .CommandText = "SELECT * FROM [Sheet1$];" 结尾设置 objCSVRecs = .Execute End With
    • 当我的 strPath 无效时,我能够重新创建下面的错误消息。 “Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Excel Driver] 'Sheet1$' is not a valid name...。”请务必验证它是否有效,例如c:\somefolder\mydata.xlsx.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2012-02-11
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多