用于SQL Server的Microsoft OLE DB提供程序错误“80004005”

问题描述:

我已将经典ASP站点迁移到新服务器,并且收到以下错误消息。用于SQL Server的Microsoft OLE DB提供程序错误“80004005”

我已经尝试了不同的连接字符串,但都没有工作。

我甚至不知道,如果连接字符串问题

新的服务器是Windows 2012服务器,SQL Server 2008 R2的快递机。


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;" 
+1

什么是脚本/ dbcode.asp 31行? – 2013-03-04 00:11:21

+2

它可以是32/64位不兼容?请看这里:[链接](http://www.a2zmenu.com/Blogs/Miscellaneous/Microsoft-OLE-DB-Provider-for-ODBC-Drivers-error-80004005.aspx) – Dalex 2013-03-04 20:19:07

+0

@Dalex感谢您的帮助,我按照你的链接指示,但仍然没有运气。任何其他想法? – Burt 2013-03-05 01:58:21

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

,或者尝试

数据源=本地主机;初始目录= DBNAME;坚持安全信息= TRUE;用户ID = MyUserName输入;密码= myPassword;复制代码

+0

感谢您的快速响应,这是一个运行其上运行的其他ASP.Net站点的活动服务器,我迁移了它们并连接到相同的SQL Server。 SQL服务器位于同一个盒子上,因此(本地)或本地主机应该可以工作。 有没有其他想法? – Burt 2013-02-28 03:05:44

+0

@Burt任何用户名或密码错误的可能性?虽然我假设连接字符串中的用户名是假的,但万一不是,我注意到你的Uid在“MySite”中有一个“c”而不是“e”。 – 2013-02-28 03:08:59

+0

@ AnnL.thanks的帮助,很确定用户名和密码是正确的(你是对的,我把它们替换成在这里发布) – Burt 2013-02-28 03:12:31

如果是Express实例,它很可能不是默认实例,而是一个命名实例。所以,你可能是指:

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

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

+0

这将是我的猜测。如果您将sqlexpress实例移动到此服务器,请确保该服务正在运行,并且您的服务器名称中包含正确的实例。 – darin 2013-02-28 04:35:50

+1

不错的猜测,但它是默认的实例,它让我难住,认为它可能与SQL浏览器或防火墙有关 – Burt 2013-02-28 23:15:46

+0

试过SQL Server浏览器和防火墙所有的设置看起来都是正确的。 – Burt 2013-03-05 01:54:42

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

+0

谢谢Jinesh,我可以连接使用凭据,所以我认为这排除了用户名或密码。任何其他想法? – Burt 2013-02-28 22:42:29

+0

你是什么意思“我可以连接使用凭据”?来自哪里? SSMS?在机器上?细节,细节,细节。有一个原因,我们都在猜测,你能猜出原因吗? – 2013-03-01 00:56:49

+0

我们有SQL Server Management Studio,我们可以在其中输入服务器,用户名,密码。我们可以在那里输入我们的详细信息,并可以从该系统检查数据库。 – 2013-03-01 07:24:05

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

这里是一个链接,我保持接近我作为关于SQL Server上可能的连接问题的提醒或检查列表。 Sql Connection Issues 并且最后可以尝试为供应商“SQLNCLI”而不是“SQLNCLI10”

+0

我看不出为什么sqlncli不应该工作,但你有没有尝试sqloledb作为你的提供者? – John 2013-03-04 23:17:10

+0

我跟着以下博客文章,一切都如预期。命名管道,TCP/IP和防火墙都正确配置。 SQL Server Browser启动。 http://blogs.msdn.com/b/walzenbach/archive/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008.aspx – Burt 2013-03-05 01:53:39

这里是我会做什么:

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

  1. 打开SSMS(SQL Server Management Studio中)和复制/粘贴 用户名/密码。不要键入它们,复制/粘贴。确认没有 问题。
  2. 火起来的代码(这是未来对我来说B/C,这将是在我的情况做下 最简单的事情)和步骤,以31行至验证 一切都设置正确。 Here is some info关于如何做 这个。我知道这可能不适用于您正在生产的此 ,因此您可以跳过此步骤。尽管如此,我会在本地机器上进行设置,并确认 在本地连接时没有问题。如果我在本地得到这个错误,那么我在修复它时有更好的机会。
  3. 验证提供商= SQLNCLI10安装生产 服务器上。我会按照this SO post,可能答案发布 由gbn。
  4. 您还有其他的工作网站吗?他们中的任何一个是经典的asp?即使不是 ,我也会将另一个站点中的连接字符串与您在此使用的 进行比较。确保没有明显的差异。
  5. 启动SQL Server Profiler并开始跟踪。连接到站点 并导致错误,然后去分析器,看看它是否给你一个 额外的错误信息。
  6. 如果全部失败,我会start going through this

对不起,我不能就这么点东西,说,有个问题!

祝你好运!

+0

不用担心迈克,我真的感谢您采取帮助的时间。希望我能深入其中。今晚会给它一个去,并希望得到它排序。 – Burt 2013-03-06 12:36:12

+0

我忘记了这个UDF技巧,我用它来生成一个连接字符串,但我仍然得到相同的错误。很确定除了连接字符串之外,还有别的东西在起作用。 – Burt 2013-03-07 00:51:46

+0

@Burt您是否可以测试。生产服务器本身的udl连接? – AardVark71 2013-03-07 12:09:52

在第31行:

cmd.ActiveConnection = Application("C2M_ConnectionString") 

你怎么实例cmd

而不是ConnectionString中是错误的,也许是cmd在新的环境不同作用的。

编辑补充:

我看到你已经走了从IIS 7到IIS 8运行在IIS 7经典ASP网站需要手动修改服务器默认值,如“允许父路径。 “一些需要的调整是否可能没有被迁移?

如果你不选项严格上运行时,你应该尝试的是 - 它往往揭示了这样微妙的问题的根源。 (当然,首先你会*宣布所有的变量,这是非常繁琐与完成的代码。)

+2

Set cmd = server.CreateObject(”ADODB.Command“) Burt 2013-03-07 00:39:36

你有没有试过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;" 

至少这是,如果没有什么帮助,我会做什么。也许你将能够获得更多有用的错误信息。

难道这是一个在x86/x64的事情吗?

以下螺纹似乎表明(本地)别名是一个32位的别名,其失败的64位服务器上: http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/c701d510-90e5-4dd0-b14f-ca1d694d6615 (注意,错误是exacly你有什么)

当你在服务器上测试.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文件\共同文件\系统\的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

如果y您可以同时确认其与别名的问题我建议你创建遵循的准则一个新的发现这里: http://msdn.microsoft.com/en-us/library/ms190445(v=sql.105).aspx

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

如果您尝试使用服务器的IP地址,勾选“SQL-Server中的配置“那SQL Server在您在连接使用的IP地址听。 (SQL Server Configurator screenshot

其他有用的东西来检查/尝试:

  • 并且还检查DB是在默认的SQL Server实例,或者如果它是在一个命名实例。
  • 您是否检查过防火墙是否具有打开SQL Server端口的TCP/IP规则?
  • 您是否尝试过使用其他软件使用TCP/IP连接来连接到SQL Server?

的SQL Server Browser服务默认情况下安装上禁用。我建议你启用并启动它。有关更多信息,请参阅this link和标题为“使用SQL Server浏览器”的部分,以解释为什么这可能是您的问题。

如果您不希望启用的服务,您可以启用TCP/IP协议(它是默认禁用),指定静态端口号,并使用127.0.01,<端口号>识别服务器。

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

步骤2:在数据源更改特定的机器名attributes'value到(当地)将resovle问题妮SQL Server 2012的