无法连接到 SQL Server 数据库

5

我正在使用asp.net c#开发一个web应用程序。我有一台服务器,今天要发布我的网站和数据库。这是一台运行Windows Server 2008 R2的服务器。

但是我有一个问题:

我的网站似乎无法访问数据库。如果我从本地网络上的另一台计算机运行网站,我可以访问服务器的数据库,但是当我从同一台数据库所在的服务器上运行网站时,我却不能访问。这真的很奇怪。我希望有人能帮忙解决。

我只是收到一个错误,说它无法访问数据库。

最奇怪的是,我在两台计算机上都使用相同的连接字符串,但仍然不起作用。难道Windows Server 2008中有一些设置吗?

这是我的连接字符串:

<add name="ConnectionString" 
     connectionString="Data Source=AXELS;Initial Catalog=Sailor;Persist Security Info=True;User ID=sa;Password=saab123" 
     providerName="System.Data.SqlClient" />

2
检查实际的异常消息。 - Andrey
如果您将连接字符串中的服务器名称更改为“localhost”或“。”,它是否在服务器上工作? - hawkke
希望你在生产环境中登录 SQL Server 的时候真的不要使用 sa 账户,对吧? - marc_s
4个回答

2
由于连接在一台机器上有效而在另一台机器上无效,我猜测您可能遇到了防火墙或类似问题 - 但在我们查看实际错误消息之前很难确定。 在此之前,有几件事情您可能需要做:
- 如果连接似乎必须在出现错误之前超时,则表示存在连接问题。 两个服务器之间是否有防火墙? 数据库服务器是否有防火墙明确允许您的计算机(或内部计算机)通过,但未设置为允许 Web 服务器通过? 您必须确保端口1433在服务器上开放。 - 是否有其他网站可以连接到数据库? - 如果您可以访问服务器的控制台,请尝试从服务器到数据库设置一个ODBC - 通常在控制面板 ->数据源(ODBC)。 如果您使用相同的DB服务器、用户名和密码设置连接并测试连接,您可能会得到一些指导信息。
如果上述方法都无法解决问题,可以尝试按照此处描述的步骤操作:http://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server-microsoft-sql-server-error/ 如果还无法解决,可以查看此处的内容 - 只适用于出现 "SQL Network Interfaces, error: 26" 错误时:http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx

你的连接在哪里失败了?当你打开连接时,尝试对其进行某些操作,是吗? - user806549
在建立到 SQL Server 的连接时发生了与网络相关或特定实例的错误。服务器未找到或无法访问。请验证实例名称是否正确,并且 SQL Server 已配置为允许远程连接。(提供程序: SQL Network Interfaces,错误: 26 - 找不到服务器/指定的实例) - parek
当前 Web 请求执行过程中引发了未处理的异常。您可以使用下面的异常堆栈跟踪信息来确定异常的起源和位置。 - parek
我们可以在聊天中继续吗? - parek
数据库服务器是新配置/安装的吗?您是否知道其他网站连接到它?您是否已经检查了我的答案中的第一个要点?(即检查DB服务器本身的防火墙。) - user806549
显示剩余5条评论

1

这可能是一个权限问题。
您需要向我们展示您的连接字符串,以便我们可以看到您尝试连接到数据库的确切方式。

例如,如果您正在使用Windows身份验证,则可能您的应用程序在两台计算机上运行在不同的帐户下 - 并且另一台计算机上的帐户有权限访问数据库,但数据库服务器上的帐户没有。


0

你是否检查了在SQL Server上使用的协议是否已启用,例如:

C:\Windows\System32\cliconfg.exe -- 64位版本

C:\Windows\SysWOW64\cliconfg.exe -- 32位版本

或者检查SQL Server配置管理器中的“SQL Server Native Client *”选项卡。


请记住,我可以从我的其他本地计算机连接到数据库,因此我不认为存在某种协议问题。 - parek
如果 SQL Server 上未启用该协议,则无法在本地使用该协议。cliconfg 是每台计算机本地的。 - KevinNicholas

0

如果您不使用Windows身份验证,则此内容仅适用,否则请阅读Christian Specht关于权限的帖子-在这种情况下我同意。

您可以从网络上的另一台计算机连接的事实意味着您的所有数据库设置、用户帐户和权限可能已经正确设置。

似乎服务器解析本地主机的方式存在问题,因为它将尝试将数据源解析为localhost,因为该机器上AXELS = localhost。

查看您的hosts文件,看看除默认指针之外是否有任何有趣的指针。

位于C:\ Windows \ System32 \ drivers \ etc

应该有一个条目:127.0.0.1 localhost


你能确认一下是否使用了Windows身份验证吗?如果是这种情况,当网站在服务器上运行时,它可能会使用ASPNET用户,但该用户没有访问数据库的权限。这就解释了为什么你可以远程连接,因为你要么使用的是网络账户,要么使用的是具有访问权限的不同服务账户。 - Charl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接