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

Iis 用于ODBC驱动程序的经典ASP Microsoft OLE DB提供程序错误';80004005';,iis,asp-classic,odbc,database-connection,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 =

我正在将应用程序从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服务器上的另一种效果

我查看了一下&我的连接字符串似乎正确&我的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)

可能只是表面上的改变,但也可能解决这个问题:

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()

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

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

  • 尝试一下:

    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
    
    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=(本地)或computername;PWD=;Password=yourpassword;”
    出错时继续下一步
    中国公开赛
    如果错误号为0,则响应写入(错误描述)
    错误转到0
    

  • 这是更好的代码,我将用它来代替,但不幸的是,它没有解决问题。我认为这与代码无关,因为完全相同的代码适用于不同的应用程序,但如果我可以采取不同的方法,我也会接受。rs.open strSQL,myConn,3,3奇怪,这种错误通常会在连接的
    .open()
    上抛出。在这种情况下,请尝试将行更改为:
    Set rs=myConn.Execute(strSQL)
    ,看看这是否解决了问题。这看起来像是将连接变量移动到login&使用Set方法让asp抛出500,错误现在可以在IIS日志文件中查看:[Microsoft][ODBC\U驱动程序\U管理器]_指定了数据源名称未找到和默认驱动程序。以前的也一样,只是现在它抛出了500。我没有注意到,但是500是从登录页面出来的,这意味着我认为它是通过登录得到的。我应该可以从这里拿走,谢谢!我尝试过的其他事情:设置32位DSN并指定它,通过applicationpoolDefaults在IIS中启用32位模式。我在dsn上遇到了一个驱动程序不兼容错误,我通过启用32位只返回原始错误消息来修复该错误:(是的,所有字段最终都被分配了。我向您保证这不是问题所在。您可以随意拒绝有关SQL最佳实践的建议;不要告诉我这与您的问题无关。很明显,这与您的问题无关。您需要执行异教徒仪式才能使其工作。希望有人能够回答您下面的问题。