1

我正在将应用程序从 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

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

这是数据库方法:

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 服务器上运行良好。

我查看了用于 ODBC 驱动程序错误“80004005”的 OLE DB 提供程序,并且我的连接字符串似乎正确,并且我的 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)
4

2 回答 2

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 myConn = getDatabaseConnection()

希望以上之一将解决这个奇怪的问题。

于 2013-04-24T11:40:19.373 回答
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
    
于 2013-07-03T16:24:41.370 回答