Microsoft OLE DB Provider for SQL Server错误'80004005'

时间:2013-02-28 02:52:52

标签: sql sql-server sql-server-2008 asp-classic

我已将经典ASP网站迁移到新服务器,并收到以下错误消息。

我尝试过不同的连接字符串,但没有一个能够正常工作。

我甚至不确定连接字符串是否是问题

新服务器是Windows 2012 Server,SQL Server 2008 R2 Express计算机。


Microsoft OLE DB Provider for SQL Server error '80004005'

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.

/scripts/dbcode.asp, line 31 

Application("C2M_ConnectionString") = "Provider=SQLNCLI10;Server=(local);Database=mysite_live;Uid=mysitec_Live;Pwd=mypass;"

11 个答案:

答案 0 :(得分:8)

如果它是Express实例,它很可能不是默认实例,而是命名实例。所以你可能意味着:

... "Provider=SQLNCLI10;Server=.\SQLEXPRESS; ...
--- instead of just (local) ---^^^^^^^^^^^^

否则,您需要在该计算机上向我们展示SQL Server配置管理器中的服务器属性,以便我们能够告诉您如何更正连接字符串。

答案 1 :(得分:3)

正如Aaron Bertrand所说,查看你的连接属性会很有意思(在Sql Server配置中检查以下是否启用了Name Pipes和TCP / Ip)。 既然您可以从SSMS连接,我会要求检查该服务器上是否允许远程连接。您还可以告诉Sql浏览器服务是否正在运行?

这是一个链接,我一直关注我作为SQL Server上可能的连接问题的提醒或检查列表。 Sql Connection Issues 最后你可以尝试作为提供者“SQLNCLI”而不是“SQLNCLI10”

答案 2 :(得分:2)

尝试在连接字符串中ping服务器。应用程序所在的服务器应该能够通过凭据指定的端口进行通信。如果您在本地开发,请尝试指定“localhost”。如果服务器是群集的,或者您作为实例安装,则需要指定该实例。如果使用sql凭据,还要确保服务器配置为混合模式身份验证。

或尝试

Data Source = localhost; Initial Catalog = DBNAME; Persist Security Info = True; User ID = MyUserName;密码= myPassword;复制代码

答案 3 :(得分:2)

它可能是权限问题,请检查服务器是否从SQL管理连接相同的配置详细信息。 其他是用户名/密码错误。

答案 4 :(得分:2)

以下是我要做的事情:

编辑:请注意,this SO post有一些用于创建正确连接字符串的有趣方法。

  1. 打开SSMS(Sql Server Management Studio)并复制/粘贴 用户名密码。不要输入,复制/粘贴。确认没有 一个问题。
  2. 启动代码(这是我的下一步b / c这将是下一个 在我的案例中最简单的事情)并步骤31行验证 一切都安装妥当。关于如何做的Here is some info 这个。我知道这对你来说可能是不可能的 正在进行生产,因此您可以跳过此步骤。如果可能的话 不过,我会在我的本地机器上设置它并验证是否存在 没有问题在本地连接。如果我在本地得到这个错误,那么我 有更好的机会修复它。
  3. 验证生产中是否安装了Provider = SQLNCLI10 服务器。我会关注this SO post,可能是贴出的答案 作者:gbn。
  4. 您还有其他工作网站吗?他们中的任何一个经典的asp?甚至 如果没有,我会比较另一个站点中的连接字符串 你在这里使用。确保没有明显的差异。
  5. 启动SQL Server Profiler并开始跟踪。连接到该网站 并导致错误,然后转到分析器,看看它是否给你一个 其他错误信息。
  6. 如果所有这些都失败了,我会start going through this
  7. 对不起,我不能指出一些事情并说,这就是问题!

    祝你好运!

答案 5 :(得分:2)

第31行:

cmd.ActiveConnection = Application("C2M_ConnectionString")

您如何实例化cmd

而不是ConnectionString错误,可能cmd在新环境中的表现不同。

已编辑添加:

我看到你已经从IIS 7迁移到IIS 8.要在IIS 7上运行经典ASP站点,需要手动更改服务器默认值,例如“允许父路径”。是否有可能某些必要的调整没有被迁移过来?

如果您没有使用Option Strict On运行,那么您应该尝试一下 - 它经常会揭示这样的微妙问题的根源。 (当然,首先你将被迫声明你所有的变量,这些变量非常使用完成的代码非常繁琐。)

答案 6 :(得分:2)

你有没有尝试过SQL Server OLE DB驱动程序连接字符串:

"Provider=sqloledb;Data Source=(local);Initial Catalog=mysite_live;User Id=mysitec_Live;Password=mypass;"

或ODBC驱动程序:

"Driver={SQL Server};Server=SERVERNAME;Trusted_Connection=no;Database=mysite_live;Uid=mysitec_Live;Pwd=mypass;"

至少这是我在没有任何帮助的情况下会做的事情。也许您将能够获得更多有用的错误信息。

答案 7 :(得分:2)

这可能是x86 / x64吗?

以下线程似乎表明 (本地) 别名是一个32位别名,它在64位服务器上失败: http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/c701d510-90e5-4dd0-b14f-ca1d694d6615 (请注意,错误是您所拥有的)

当您在服务器上测试.udl时,您是否同时测试了x86和x64?

根据此博客帖子(http://blogs.msdn.com/b/farukcelik/archive/2007/12/31/udl-test-on-a-64-bit-machine.aspx)的建议,您可以测试一下 当地的udl:

  • 在64位中只需双击它(与运行“C:\ Program Files \ Common Files \ System \ Ole DB \ oledb32.dll”相同,OpenDSLFile C:\\ test.udl
  • 在32位中通过双重运行C:\ Windows \ syswow64 \ rundll32.exe“C:\ Program Files(x86)\ Common Files \ System \ Ole DB \ oledb32.dll”,OpenDSLFile C:\\ test。 UDL

如果您可以确认别名有问题,我建议您按照此处的指南创建一个新的: http://msdn.microsoft.com/en-us/library/ms190445(v=sql.105).aspx

答案 8 :(得分:2)

您是否尝试使用服务器IP 地址而不是“(本地)”? 像“服务器= 192.168.1.1; ”之类的东西(显然你需要使用服务器的真实IP地址)

如果您尝试使用服务器IP地址,请在您使用的IP地址上检查“ SQL-Server配置程序”, SQL Server正在侦听连接。 (SQL Server Configurator screenshot

检查/尝试其他有用的事情:

  • 并检查数据库是否在默认的SQL Server实例中,或者是否在命名实例中。
  • 您是否检查过防火墙是否具有用于打开SQL Server端口的TCP / IP规则?
  • 您是否尝试使用其他使用TCP / IP连接的 连接到SQL Server?

答案 9 :(得分:2)

安装时默认禁用SQL Server Browser服务。我建议您启用并启动它。有关详细信息,请参阅this link和标题为“使用SQL Server Browser”的部分,以解释为什么这可能是您的问题。

如果您不想启用该服务,您可以启用TCP / IP协议(默认情况下已禁用),指定静态端口号,并使用127.0.01,<端口号>识别服务器。

答案 10 :(得分:2)

步骤1:启用TCP / IP协议  开始>>所有程序>> Microsoft SQL Server>>配置工具>> SQL Server配置管理器>> SQL Server网络配置>> MSSQLSERVER的协议>>右键单击“TCP / IP”并选择“启用”。

步骤2:将数据源属性值中的特定计算机名称更改为(本地)将解决问题ni SQL SERVER 2012。