用于ODBC驱动程序的经典ASP Microsoft OLE DB提供程序错误'80004005'

时间:2013-04-23 20:47:52

标签: iis asp-classic odbc database-connection

我正在努力将应用程序从IIS 6迁移到IIS 7.5,并且遇到了最棘手的问题:

Microsoft OLE DB Provider for ODBC Drivers error '80004005' 

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 

/Complaints/Login.asp, line 175 

以下是第175行的代码:

  myConn = getDatabaseConnection()
  set rs = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM Users WHERE lower(Login) = lower('" & uId & "') and Active = 1"
  rs.Open strSQL, myConn, 3, 3

这里没什么特别的......

这是db方法:

function getDatabaseConnection()

    Dim strConnection

        strConnection = "Driver={SQL Server};Server=server.domain.com;Database=cc;uid=acc;pwd=xxx;"

    Set GetDatabaseConnection = Server.CreateObject("ADODB.Connection")
    GetDatabaseConnection.CommandTimeout = 60
    GetDatabaseConnection.ConnectionTimeout = 60
    GetDatabaseConnection.CursorLocation = 3

    GetDatabaseConnection.Open strConnection

end function

这似乎适用于在同一个应用程序池(.NET 1.1)中运行的类似经典asp应用程序

我试过:复制粘贴其他应用程序的代码,使用连接字符串代替db方法(当然抛出500),更改应用程序池,谷歌和&作为另一个踢它在IIS 6服务器上运行良好。

我看了OLE DB Provider for ODBC Drivers Error "80004005'&我的连接字符串似乎正确&我的ASP.NET 1.1应用程序池只能在32位模式下运行。在先前服务器上设置的DSN也不相关。

我的应用程序在域A上的IIS 5和域A上的IIS 6上工作,但是这个7.5服务器在域B上。因此我使用的是FQDN。我没有做过任何其他特定领域的更改。系统使用上述方法对用户进行身份验证。

编辑:也尝试了

strConnection = "dsn=my32bitdsn;uid=xxx;pwd=xxx;"

我继承了这段代码,使用经典的ASP是如此,任何人都可以帮忙吗?

更新的代码:

  Dim strConnection, oConn
  'get status 
  set rs = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM Users WHERE lower(Login) = lower('" & uId & "') and Active = 1"
  'rs.Open strSQL, myConn, 3, 3

   strConnection = "Driver={SQL Server};Server=server.domain.com;Database=cc;uid=acc;pwd=xxx;"
  Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.CommandTimeout = 60
    oConn.ConnectionTimeout = 60
    oConn.CursorLocation = 3
    oConn.Open strConnection
  Set rs = oConn.Execute(strSQL)

2 个答案:

答案 0 :(得分:2)

可能只是改变外观,但也可以解决这个问题:

Function getDatabaseConnection()
    Dim strConnection, oConn
    strConnection = "Driver={SQL Server};Server=server.domain.com;Database=cc;uid=acc;pwd=xxx;"

    Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.CommandTimeout = 60
    oConn.ConnectionTimeout = 60
    oConn.CursorLocation = 3
    oConn.Open strConnection

    Set getDatabaseConnection = oConn
End Function

我总是担心直接使用函数名会导致不必要的调用或奇怪的结果,所以习惯了上述方法。

第二件事是你通过没有“Set”将连接分配为非对象,这也可能导致奇怪和意外的问题。将行更改为:

Set myConn = getDatabaseConnection()

希望以上其中一个能解决这个奇怪的问题。

答案 1 :(得分:0)

我不确定你是否已经解决了这个错误,但如果你想尝试让它抛出一个可读错误,你可以尝试将其作为连接字符串的一部分。

  1. 您的连接字符串表示数据库服务器是server.domain.com,或者您只是将其放在那里以替换您的公司信息?

  2. 试一试:

    dim cn
    Set cn=Server.CreateObject("ADODB.Connection")
    cn.ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Initial Catalog=dbName;Data Source=(local) or computername;PWD=;Password=yourpassword;"
    on error resume next
    cn.Open
    if err.number <> 0 then response.Write(err.description) 
    on error goto 0