SQL网络接口错误:26 - 找不到指定的服务器/实例。

52

我有一个大问题,尝试了好几天都无法解决,所以需要你的帮助。我有一个asp.net 4.0的web应用程序,其中实现了自定义成员身份验证和角色提供程序。当我打开应用程序主页时,它会连接到数据库并检索一些信息。还有一个登录表单,当我登录时,它通过数据库验证用户,并将我重定向到保留页面,但是此时出现了以下错误:

在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问。请验证实例名称是否正确,并确认 SQL Server 配置为允许远程连接。(provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

描述:

当前 Web 请求执行期间发生未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及代码中的错误来源。

异常详细信息:

System.Data.SqlClient.SqlException: 在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到服务器或无法访问。请验证实例名称是否正确,并确认 SQL Server 配置为允许远程连接。(provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

源代码错误:

当前 Web 请求执行期间生成了一个未处理的异常。您可以使用下面的异常堆栈跟踪识别出异常的起源和位置。

我尝试了很多方法,在stackoverflow上找到了一些解决方案,但什么都没有用。这是我的连接字符串:

<connectionStrings>
  <clear/>
  <remove name="LocalSqlServer"/>
     <add name="LocalSqlServer" connectionString="Data Source=MSSQL2008-1;Initial Catalog=agency;
        Integrated Security=False;User ID=adis_agency;Password=niarda2012;Connect Timeout=180;Encrypt=False;
        Packet Size=4096" providerName="System.Data.SqlClient" />
     <add name="AgencyConn" connectionString="Data Source=MSSQL2008-1;Initial Catalog=agency;
        Integrated Security=False;User ID=adis_agency;Password=niarda2012;Connect Timeout=180;Encrypt=False;
        Packet Size=4096" providerName="System.Data.SqlClient"/>
</connectionStrings>

以下是成员资格和角色管理器的Web.config部分:

<membership defaultProvider="AuthProvider">
  <providers>
    <clear/>
      <add name="AuthProvider" type="AuthenticationProvider" applicationName="~/Reserved/" connectionStringName="AgencyConn"/>
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="MyRoleProvider">
  <providers>
    <clear/>
      <add name="MyRoleProvider" type="RoleAccessProvider" connectionStringName="AgencyConn"/>
  </providers>
</roleManager>

请问有人能帮忙找出问题所在吗?


检查您项目中的所有connectionStrings。您可能不仅会看到一个正确的connectionString,还可能会看到另一个不正确的connectionString。在您的项目中“检查所有connectionStrings”。 - Jogi
我遇到了同样的问题,对我来说,问题是我的 MySQL 服务器实例正在侦听某个不同的端口,而我没有在连接字符串中指定端口号。连接字符串=服务器=数据库服务器,端口 - Sachin Vishwakarma
请查看此处定位服务器/实例指定错误 - Andile
讨厌SO关闭这种类型的问题。这是一个程序员遇到的问题,许多其他程序员也经历过。SO不希望这个人得到任何帮助! - Paul McCarthy
19个回答

55

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

在机器B上:

1)开启名为“SQL Server Browser”的Windows服务并启动该服务

2)在Windows防火墙中,启用传入端口UDP 1434(以防连接到机器A上的SQL Server Management Studio或机器A上的程序正在连接)

3)在Windows防火墙中,启用传入端口TCP 1433(以防有telnet连接)

4)在SQL Server Configuration Manager中,启用TCP/IP协议以使用端口1433

输入图像描述


1
只有在IPAll部分设置TCP端口后才能访问!如果我仅为特定IP设置它,并保持动态端口为空并使“Enabled: Yes”,则无法连接!这可以通过netstat -ano | find“:port”来确认,在其中SQL服务器仅在IPAll部分设置端口时才会侦听。 - Jawad Al Shaikh
@JawadAIShikh,你使用的是哪个操作系统和版本? - Entree
1
Server 2012 R2标准版和带有工具的SQL Server 2012 Express。顺便说一下,我的上一条评论意味着赞扬你的答案,因为微软官方文档没有提到在IPAll下设置端口:https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port - Jawad Al Shaikh
1
对我来说问题是打开名为“SQL Server Browser”的Windows服务并启动该服务 - Gerhard
作为一种解决方法(经过长时间的尝试),我使用了IP地址\实例,它起作用了。当我使用计算机名称时,它会失败。 - JohnC
显示剩余2条评论

22

对我来说问题在于DNS记录出错了...

以下内容非常有用,主要参考自 这篇博客文章

这个错误信息实际上很具体,解决方法也很简单。

只有在连接到SQL Server命名实例时才会收到这个错误消息。对于默认实例,我们永远不会看到这个消息,因为即使在这个阶段失败(即找不到指定的服务器/实例),我们仍将继续使用默认值尝试连接,例如默认TCP端口1433、命名管道的默认管道名称。

每当客户端连接到SQL Server命名实例时,我们都会向服务器机器UDP端口1434发送一个SSRP UDP数据包。我们需要这一步来获取SQL实例的配置信息,例如启用的协议、TCP端口、管道名称等。如果没有这些信息,客户端就不知道如何连接,就会出现此错误消息。

简而言之,我们收到这个错误消息的原因是客户端堆栈无法从SQL Browser接收SSRP响应UDP数据包。为了隔离确切的问题,请按照以下步骤执行:

  1. 确保您的服务器名称正确,例如名称无误。

  2. 确保您的实例名称正确,并且在目标计算机上确实存在这样的实例。(请注意,某些应用程序将\转换为)。

  3. 确保服务器机器可以访问,例如DNS可以正确解析,您能够ping通服务器(并非总是如此)。

  4. 确保 SQL Browser 服务在服务器上运行。

  5. 如果在服务器上启用了防火墙,则需要将sqlbrowser.exe和/或UDP端口1434添加到例外。

有一个特殊情况,即在检查步骤1到4之后仍可能失败。这种情况也可能发生在以下情况下:

  1. 你的服务器是集群中的命名实例或多网卡机器上的实例。
  2. 你的客户端是安装了防火墙的Vista机器。

一个可能会有用的工具(对我来说确实有用)是PortQry。如果这个命令返回信息并且包含你的目标实例,那么你可以排除上述可能性4)和5),也就是说你有一个运行着SQL Browser并且防火墙不会阻止SQL Browser UDP数据包的情况。在这种情况下,你可以检查其他可能的问题,比如连接字符串是否正确。

最后补充一点,当使用SNAC时,同样的问题会出现以下错误信息: [SQL Native Client]SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]。

微软最近发布了一个指导步骤,可以作为一个一站式解决大部分与SQL Server连接问题的指南:解决连接SQL Server的连接问题


1
在我们的实例中,我们的组织在新机器上安装了一个新实例,并移动了所有旧的数据库。 现在这是在我们的开发环境中。 由于某种原因,我们的DBA决定直接从我们的生产数据库引用我们开发环境中的某些内容,因此它与我们应用程序的连接字符串无关,但归根结底,问题在于找不到旧的服务器实例。你把我引向了正确的方向。谢谢。 - Gawie Schneider
1
打开UDP端口1434对我很有用。谢谢。 - QMaster
关于PortQry的非常有用的通知 - Kostia Shiian

11

打开窗口,按下windows+R键,输入services.msc并回车。

如果SQL服务器没有自动启动,则手动启动它。

然后尝试登录。


8

我在我的ASP.NET MVC 4应用程序中遇到了相同的问题。

我解决这个问题的方法是在DatabaseContext中通过基础构造函数传递我想使用的连接字符串的名称。

public class DatabaseContext : DbContext
{ 
    public DatabaseContext()
        : base("DefaultConnection") // <-- this is what i added.
    {
    }

    public DbSet<SomeModel> SomeModels { get; set; }
}

7
答案就在错误信息中:

这个答案已经包含在错误信息中:

Error Locating Server/Instance Specified

基本上,您在连接字符串中使用了错误的服务器/实例,即这部分内容:
Data Source=MSSQL2008-1

出现问题的原因可能有两种:(1)指向SQL服务器的服务出现错误,或者服务器名不能被解析为IP地址。(2)运行SQL Server的服务器上的SQL Browser服务没有启动,或者SQL服务器上的Windows防火墙或其他防火墙在拒绝传入的连接。

如果服务器名正确,但仍然无法连接,则最终变成了一个网络问题,您需要找出客户端无法连接到服务器的原因(这很可能是一个基本的网络问题而不是SQL Server配置问题)。


谢谢您的回答,但正如我所说,我使用连接字符串连接并检索数据,即使用户验证也会发生,我怀疑的唯一是角色提供程序类,因此我进行了一些测试,但没有解决错误。 - ivi.hamiti
抱歉没回复,我在代码中硬编码了另一个连接字符串。无论如何还是谢谢。 - ivi.hamiti
另外,如果您是从命令行(sqlcmd)执行此操作,则可能会缺少“-d yourdatabase”。 - Orn Kristjansson

5

如果您正在使用 SQL Server 的 Developer Edition,请在连接字符串中将 ".\SQLEXPRESS" 更改为您的计算机名称。

更改前:

Data Source=.\SQLEXPRESS;Initial Catalog=SchoolDB-EF6CodeFirst;Integrated Security=True;MultipleActiveResultSets=True

更改后:

Data Source=DESKTOP-DKV41G2;Initial Catalog=SchoolDB-EF6CodeFirst;Integrated Security=True;MultipleActiveResultSets=True


3

将\SQLEXPRESS更改为您的SQL Express名称,这样做对我有效。

 <add name="BlogDbContext" connectionString="data source=your name here; initial catalog=CodeFirstDemo; integrated security=True" providerName="System.Data.SqlClient"/>

你救了我的一天..我已经找了两个多小时的解决方案了....上帝保佑你的头脑..... - Qwerty

3

在我的实例中,web.config文件中的connectionString名称拼写错误。这是Entity Framework使用的数据库上下文名称。我想这就是当EF无法将connectionString名称与上下文匹配时出现的错误。


类似于这个问题,我之前有一个"Server=.<local_server><instance>..."的设置,但是由于我已经指定了<local_server>名称,所以需要删除"."。 - Cryptc

2

我曾遇到同样的错误,我启动了 SQL Server Express 服务,问题得到了解决。希望这能帮到你。


1
我遇到了这个问题,并解决了它。问题似乎是这样的:

错误:

<add key="aaa" value="server=[abc\SQL2K8];database=bbb;uid=ccc;password=ddd;" />

正确

<add key="aaa" value="server=abc\SQL2K8;database=bbb;uid=ccc;password=ddd;" />

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