【问题标题】:SQL Server 2005 has problems connecting to a website running on the same serverSQL Server 2005 在连接到同一服务器上运行的网站时出现问题
【发布时间】:2010-09-08 23:56:10
【问题描述】:

建立与服务器的连接时发生错误。连接到 SQL Server 2005 时,此故障可能是由于在默认设置下 SQL Server 不允许远程连接造成的。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

您好,我是在 SQL Server 2005 上开发的新手。我已经使用 SQL Server 2000 工作了几年,但是在完成了连接到服务器的常规操作之后,我在 Web 服务器上遇到了这个异常。

谷歌上有几个链接指向我可能的解决方案,但它们都没有解决我的问题。我在“Surface Area 不管什么...”对话框上进行了更改(这到底是什么?为什么 SQL Server 发生了如此大的变化???现在看起来很复杂)。

我已确保正确配置 SQL Server 2005 以允许数据库服务器实例上的传入连接。我还选择了 Automatic 作为启动类型,以便在每次系统启动时自动启动 SQL Server Browser 服务。不,没有防火墙在运行。

我尝试将连接字符串更改为使用端口连接、使用 IP 连接、使用实例名称连接...

似乎没有任何效果,我仍然遇到同样的错误。有什么提示吗?

回答人们提出的问题: 是的,我可以使用 Management Studio 从另一台计算机进行连接。 是的,我确定它已配置为接受本地和远程 TCP/IP 以及命名管道。 是的,我重新启动了服务器。

我正在使用已启用的混合模式安全性。我已经启用了 sa 用户。 我能够使用 .udl 文件连接到数据库,并且我检查了我的连接字符串是否正常。我可以使用 DBArtisan 和 SQL Server 客户端工具连接到数据库。我可以在服务器和不同的机器上做到这一点。即使有这一切......

网站仍然无法连接。

新的更新... 我整天都在为这个问题苦苦挣扎,但仍然没有找到原因。我发布的错误消息似乎是.net 在无法连接时给出的一般错误。我在连接字符串上放置了垃圾(键入不存在的服务器),我仍然得到同样的错误。

这些是我在服务器上使用的一些连接字符串:

connectionString="Integrated Security=SSPI;数据源=SERVER;初始目录=db;网络库=DBMSSOCN;"

connectionString="数据源=SERVER;初始目录=db;用户ID=sa;密码=xxxxx;"

connectionString="数据源=SERVER\MSSQLSERVER;初始目录=db;用户ID=sa;密码=xxxxx;"

我尝试使用一些奇怪的命令注册 sql server 实例,我在这里发现: http://kb.discountasp.net/article.aspx?id=1041 为此,我使用了 aspnet_regsql.exe 工具。还是不行……

我还知道服务器上安装了最新版本的 MDAC。我唯一怀疑的是服务器有两个数据库引擎:SERVER 和 server\sqlexpress

这和问题有关系吗?

【问题讨论】:

  • 为什么要在同一台机器上运行两个数据库引擎?

标签: asp.net sql-server-2005 database-connection


【解决方案1】:

我唯一怀疑的是服务器有两个数据库引擎:SERVER 和 server\sqlexpress

我认为这是问题的根源。您打算连接到哪一个?您需要指定要连接的“实例”。

假设您打算连接到 SERVER 实例,则连接字符串应如下所示(假设默认实例名称):

数据源=YOURSERVER\MSSQLSERVER;初始目录=db;用户 ID=sa;密码=xxxxx;

或者对于 sql express,连接字符串如下所示: 数据源=YOURSERVER\sqlexpress;初始目录=db;用户 ID=sa;密码=xxxxx;

【讨论】:

  • 无赖,我现在很难过。如果这是一个选项,接下来我会尝试将 SQL Express 实例全部删除(卸载 sql express)并合并。
【解决方案2】:

您能否通过 Management Studio 从另一台计算机连接到 SQL Server?这可能会帮助您缩小是 SQL Server 配置还是连接字符串配置。

【讨论】:

  • 我可以使用 DBArtisan 进行连接。所以我猜问题不在连接字符串上。
【解决方案3】:

重新检查表面区域配置,并确保允许 TCP/IP 连接。

【讨论】:

    【解决方案4】:

    这可能是很多事情。我要检查的第一件事是确保您可以使用 SQL Server Management Studio 连接到服务器。其次,检查您的连接字符串以确保它是正确的。表面积配置不应应用于本地连接。

    【讨论】:

      【解决方案5】:

      尝试在服务器上重新安装最新的 MDAC。我曾经遇到过类似的问题,现在解决了。

      [http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en][1]

      【讨论】:

        【解决方案6】:

        根据错误,代码似乎正在尝试使用命名管道而不是 TCPIP 进行连接。您实际上可能需要在连接字符串中明确指出 sql 提供程序应使用 tcpip 进行连接,因此您的连接字符串如下所示。

        使用集成身份验证(Windows):

        集成安全=SSPI;数据源=SERVERNAME;初始目录=DATABASENAME; 网络库=DBMSSOCN;

        使用 SQL 身份验证:

        UID=用户名; PWD=密码;数据源=SERVERNAME;初始目录=DATABASENAME; 网络库=DBMSSOCN;

        我之前看到过类似的情况,由于某种原因,“命名管道”默认用作传输/连接层,特别是因为 Web 应用程序和 sql 服务器都在同一台机器上运行。我通常总是使用 tcpip 作为传输或网络库。

        另一种故障排除技术是使用 UDL(或数据链接文件)对连接进行故障排除。这允许您在连接提供程序(ODBC、OLEDB 等)之间切换并设置其他连接选项。

        1. 在机器桌面右键选择新建->文本文档。
        2. 将 *.txt 文件重命名为 TestConnect.udl(名称无关紧要,只需 .udl 扩展名即可)。您应该会看到图标从文本文件图标变为在数据网格顶部显示计算机的图标,或者类似的东西(换句话说,窗口应该有一个图标。)。
        3. 现在双击该文件,您将看到“数据链接属性”小程序出现。
        4. 单击提供程序选项卡,您将看到不同连接提供程序的列表。我首先选择“Microsoft OLE DB Provider for SQL Server”。我们可以使用它来确认 OLE DB 是否可以连接。
        5. 单击下一步,然后输入服务器名称或 IP 地址。选择 Windows NT 集成安全性。 (您可以随时返回并将其更改为使用 sql 登录。)此时您可以单击“测试连接”。如果连接成功,则从下拉列表中选择一个数据库名称。
        6. 最后,如果连接失败,请选择“全部”选项卡,然后查找“网络库”并编辑其值,将其设置为“DBMSSOCN”。
        7. 返回连接选项卡,再次点击“测试连接”。
        8. 这次重复第 4 步和第 5 步,选择“SQL Native Client”。

        希望这会有所帮助。

        【讨论】:

        • 我尝试使用UDL,可以正常连接数据库,但是网站一直无法连接。
        • 您是否更新了网站的连接字符串以包含“Network Library=DBMSSOCN”?您是否仍然遇到引用命名管道的相同错误?
        • 尝试此处列出的各种故障排除步骤:blogs.msdn.com/sql_protocols/archive/2007/03/31/…
        【解决方案7】:

        在提示符下:

        osql -E -S

        ...给你一个 > 提示符?

        【讨论】:

        • 我可以使用 .udl 文件进行连接,所以我想我也可以使用 osql 进行连接
        【解决方案8】:

        您是否尝试在连接字符串中指定实例名称?显然 sql server express 对实例名称特别挑剔。

        我还开始研究 SQL Server 配置管理器。那么您是否点击了“SQL Server 2005 网络配置”,然后查看了“InstanceName 的协议”?并且您启用了 TCP/IP 和命名管道?

        您是否还查看了“SQL Native Client Configuration”-->“Client Protocols”,并且您看到那里也启用了 TCP/IP 和命名管道?

        使用SQL Server 2005 Surface Area Configuration工具,点击“Surface Area Configuration for Services and Connections”,然后在“Database Engine”-->“Remote Connections”下选择什么?由于您似乎正在尝试使用命名管道进行连接,因此您需要确保选择“本地和远程连接”和“同时使用 tcp/ip 和命名管道”。

        您可能知道,一旦进行了任何更改,您必须通过 Management Studio 停止并重新启动 sql server 实例(您不需要重新启动整个机器,尽管重新启动整个机器会到达那里)。

        还有我的最后一条建议。暂时离开这个,然后让你的思绪离开它几分钟。当您重新潜入时,您可能会发现以前错过或忽略的东西。

        【讨论】:

          【解决方案9】:

          我解决了连接问题。问题出在我的应用程序上。问题的原因是开发(而不是生产)数据库的连接字符串由生成数据集的对话框之一硬编码。此对话框将连接字符串放置在 web.config 和名为“Settings.settings.cs”的隐藏源代码文件中。问题已通过将连接字符串固定到正确位置来解决。

          该错误消息完全具有误导性,但通过遵循堆栈跟踪中提供的所有方法,我能够发现这一点。

          因此,如果您发现此错误消息,可能有很多原因。您的第一个赌注是遵循此错误的通常步骤,即检查服务器是否允许远程和本地连接,并重新启动浏览器服务。

          如果这不起作用,请检查堆栈跟踪,查找应用程序中的代码,在此处设置断点并探索连接字符串的所有属性。至少我是这样解决的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-01
            • 2010-10-11
            • 2011-05-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多