为什么在连接到 SQL Server 时会出现与网络相关或特定于实例的错误?

72

我很沮丧。我的网站运行在Visual Web Developer 2008 Express上,使用本地数据库,一切都很顺利。我也将同样的网站部署到了生产服务器上。一切都很好,但今晚我在生产环境上进行了“重置”。

  1. 我删除了几个表格,重新创建它们并插入数据,这时一切正常。

  2. 我通过FTP删除了所有文件。

  3. 我使用Visual Studio中的“复制网站”模块,并通过FTP将网站复制到服务器上。

当我登录我的网站时,出现了以下错误:

“/”应用程序中的服务器错误。

在建立到SQL Server的连接时发生了与网络相关或特定于实例的错误。无法找到服务器或无法访问服务器。请确认实例名称是否正确,并检查SQL Server是否配置为允许远程连接。(提供程序: SQL Network Interfaces, 错误: 26 - 定位服务器/实例时出错)

说明: 执行当前 web 请求期间生成未经处理的异常。请检查堆栈跟踪信息,了解有关该错误以及代码中其起源的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 在建立到 SQL Server 的连接时发生与网络相关或特定于实例的错误。无法找到服务器或无法访问服务器。请确认实例名称是否正确,并检查 SQL Server 是否配置为允许远程连接。(提供程序: SQL Network Interfaces, 错误: 26 - 定位服务器/实例时出错)


关于SQL连接方面没有做任何更改,这是我一直在使用的旧代码。

我的网站因此完全瘫痪,我内心感到非常难受,因为我感觉我什么也做不了。

有人可以帮帮我吗?


你能否从另一台机器连接到SQL服务器?你是否意外关闭了它? - Preet Sangha
我在尝试连接我的SQL管理工具时遇到了相同的错误。实际上,我从未尝试过这样做,所以我不知道它是一种新行为还是相同的东西。这是一个生产服务器,所以我不知道我的SQL服务器是否已关闭。我只知道从Web面板,我可以无问题地访问我的数据库内容... - Jean-François Côté
我建议您检查一下SQL服务器是否已关闭,或者可能有新的防火墙等阻挡了连接。我的建议是首先重启SQL服务器。如果问题仍然存在,请与基础架构团队联系,以查看SQL服务器是否正在运行并且可以从其他计算机访问。 - Preet Sangha
我已经按照这里的故障排除步骤解决了它:https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/troubleshoot-connecting-to-the-sql-server-database-engine?view=sql-server-2017 - Yusril Maulidan Raji
针对代码迁移(update-database 等),请参见此答案 - Marc.2377
15个回答

53

当你在服务器上复制新的网站版本时,可能会覆盖连接字符串。请检查web.config文件中的连接字符串,并确保其有效。


3
实际上,我之前使用的是Visual Studio 2005,并进行了“发布到网站”的操作。我不知道的是,在此过程中,Visual Studio在编译之前将网站置于非调试模式下。现在我使用Visual Web Developer 2008 Express并使用“复制到网站”而非“发布到网站”,这一步骤没有被执行。由于我的连接字符串基于“是否处于调试状态”,它试图连接到我的开发服务器!谢谢! - Jean-François Côté
其他解决方案,使用服务,请查看此链接,希望有所帮助。 - Shaiju T
对于代码迁移(update-database等),请参见此答案 - Marc.2377

43

如果您从 Windows 机器 A 连接到安装有 SQL Server 的 Windows 机器 B 并出现此错误,需要执行以下操作:

机器 B上:

  1. 打开名为 "SQL Server Browser" 的 Windows 服务,并启动该服务 Windows Services
  2. Windows 防火墙 中:
    • 启用传入端口 UDP 1434(以防连接来自机器 A 上的 SQL Server Management Studio 或机器 A 上的程序)
    • 启用传入端口 TCP 1433(以防 Telnet 连接) Windows firewall
  3. SQL Server Configuration Manager 中:
    • 启用端口 1433 的 TCP/IP 协议 Sql Server Configuration Manager

14

我已经解决了这个问题,原因是由于SQL浏览器服务。

解决此类问题的方法如下:

  • 检查连接字符串中指定的SQL Server实例名称的拼写是否正确。

  • 使用SQL Server表面配置工具,启用SQL Server接受TCP或命名管道协议的远程连接。有关SQL Server表面配置工具的更多信息,请参见"服务和连接的表面区域配置"。

  • 确保您已经为SQL Server的服务器实例配置了防火墙,以打开SQL Server和SQL Server浏览器端口(UDP 1434)的端口。

  • 确保在服务器上启动了SQL Server浏览器服务。

链接 - http://www.microsoft.com/products/ee/transform.aspx?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=-1


SQL Server Browser 对我来说被禁用了,不确定为什么它在开箱时就被这样设置,但这解决了问题,谢谢。 - Nick
这个问题很奇怪...我收到了 MS Sql Server 连接异常,但我使用的是 MySql。在单元测试中连接是正常的。 - IAbstract
嘿!你建议在主机电脑的Windows防火墙上允许UDP 1434端口的做法帮助解决了我们的问题。我们还在防火墙中允许了TCP 1433端口。尽管你的答案已经有13年了,但它在2023年解决了我们的问题!谢谢你! - anacron
嘿!你建议在主机电脑的Windows防火墙上允许UDP 1434端口的做法帮助解决了我们的问题。我们还在防火墙中允许了TCP 1433端口。尽管你的答案已经有13年了,但它在2023年解决了我们的问题!谢谢你! - undefined

4

问题的原因是SQL SERVER在services.msc中被停止了。解决该问题的方法是从services.msc中启动SQL SERVER。

enter image description here


4

请检查以下内容:

确保您的数据库引擎已配置为接受远程连接

• 开始 > 所有程序 > SQL Server 2005 > 配置工具 > SQL Server Surface Area Configuration • 单击“服务和连接的表面区域配置” • 选择出现问题的实例 > 数据库引擎 > 远程连接 • 启用本地和远程连接 • 重新启动实例

  1. 检查 SQL Server 服务帐户

• 如果您不使用域帐户作为服务帐户(例如,如果您正在使用 NETWORK SERVICE),则可能需要先切换此帐户。

  1. 如果您正在使用命名的 SQL Server 实例,请确保在 ASweb P.NET 应用程序的连接字符串中使用该实例名称

• 通常,指定数据库服务器所需的格式是 machinename\instancename。 • 也请检查您的连接字符串


将我的连接字符串中的“localhost”更改为SQL Server实例名称即可解决问题。正确的实例名称是“PCNAME\SQLEXPRESS”。 - SushiGuy

3
我最近遇到了这个问题,最终发现是端口问题。我的生产 SQL Server 的端口设置为 1427 而不是 1433。

只需更改连接字符串为

...data source=MySQLServerName,1427;initial catalog=MyDBName...

希望这篇内容对于遇到类似问题的人有所帮助。

2

我曾经遇到过SQL Server 2008 R2相同的问题,当我检查“SQL Server Configuration Manager”时,我的SQL Server实例已经停止。右键单击并启动实例解决了这个问题。


2
如果您的服务器正常运行,但突然出现错误,则可能是您的服务器/实例停止或连接设置被某种方式更改了。
对于SQL Server 2008,您可以按照以下步骤解决此问题:
1. 转到“开始 > 所有程序 > SQL Server 2008 > 配置工具 > SQL Server配置管理器 > SQL Server服务”。 在这里,您将看到所有实例及其状态。
2. 您要连接的实例的状态可能已经停止。
3. 双击该实例,然后单击“连接”。
4. 它会连接,现在返回并运行您的应用程序,您将能够无错误地连接。
请注意,此解决方案假定错误不是由连接字符串中的任何问题引起的。

这里是一些编程方面的术语:
  • 变量:存储数据值的容器
  • 函数:一段可重复使用的代码,用于执行特定任务
  • 条件语句:根据条件是否为真来执行不同的代码块
  • 循环语句:重复执行一段代码,直到满足某个条件
  • 类:一种面向对象的编程结构,用于定义对象的属性和方法
编程是一门有趣且强大的技能。它可以让你创建各种应用程序、网站和游戏等。要成为一名优秀的程序员,需要不断学习和实践。通过编程,你可以将自己的创意变成现实,并帮助解决现实世界的问题。
- dove

2

1
在我的情况下,这是一个非常愚蠢的错误。我正在使用一个库从配置文件中读取连接字符串,但我忘记了双斜杠。
例如,我有: localhost\sqlexpress 被解释为 localhostsqlexpress 而我应该有 localhost\\sqlexpress 注意\

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