SQL网络接口,错误:26 - 错误定位服务器/实例指定[关闭]

Posted

技术标签:

【中文标题】SQL网络接口,错误:26 - 错误定位服务器/实例指定[关闭]【英文标题】:SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified [closed] 【发布时间】:2012-11-25 03:04:39 【问题描述】:

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

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)

说明:

当前执行过程中发生了未处理的异常 网络请求。请查看堆栈跟踪以获取有关的更多信息 错误及其源自代码的位置。

异常详情:

System.Data.SqlClient.SqlException:网络相关或 建立连接时发生特定于实例的错误 SQL 服务器。服务器未找到或无法访问。核实 实例名称正确且 SQL Server 配置为 允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/指定实例时出错)

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

我尝试了很多东西,我在 *** 中找到了一些解决方案,但没有任何效果。这是我的连接字符串:

<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>

请任何人帮忙找出问题所在?

【问题讨论】:

检查项目中的所有连接字符串。您可能看到的可能不仅仅是一个连接字符串,而且它是正确的连接字符串。它可能是另一个可能不正确的 connectionString。在您的项目中“检查所有连接字符串”。 我遇到了同样的问题,对我来说,问题是我的 SQL 服务器实例正在侦听某个不同的端口,而我没有在连接字符串中指定端口号。连接字符串=服务器=数据库服务器,端口 请看这里Error Locating Server/Instance Specified 【参考方案1】:

如果您从 Windows 机器 A 连接到 Windows 机器 B(安装了 SQL Server 的服务器),并且收到此错误,您需要执行以下操作:

在机器 B 上:

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

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

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

4.) 在 SQL Server 配置管理器中,为端口 1433 启用 TCP/IP 协议

【讨论】:

IPAll部分下设置tcp端口后才能访问!如果我仅将其设置为特定 IP 并将动态端口保留为空白并设置 Enabled:Yes 它没有连接!这可以通过netstat -ano | find ":port" 确认,其中 sql server 仅在 IPAll 部分下设置的端口时才侦听。 你在@JawadAIShikh 上是什么操作系统和版本? Server 2012 R2 Standard 和 SQL Server 2012 express 带有工具。顺便说一句,我之前的评论是对你答案的补充,因为 MS 官方文档没有提到在 IPAll 下设置端口:docs.microsoft.com/en-us/sql/database-engine/configure-windows/… 我的问题是打开名为“SQL Server Browser”的Windows服务并启动该服务 @Gerhard - 你的意思是那是你的解决方案?【参考方案2】:

对我来说,问题是 DNS 记录是错误的......

以下内容非常有帮助,主要来自this blog post。

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

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

每次客户端连接SQL Server命名实例时,我们都会向服务器机器UDP端口1434发送一个s-s-rP UDP数据包。我们需要这一步来了解SQL实例的配置信息,例如启用的协议,TCP端口、管道名称等。如果没有这些信息,客户端将不知道如何连接,并且会失败并显示此错误消息。

总而言之,我们收到此错误消息的原因是客户端堆栈无法接收来自 SQL Browser 的 s-s-rP 响应 UDP 数据包。为了找出确切的问题,请按照以下步骤操作:

    确保您的服务器名称正确,例如,名称没有拼写错误。

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

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

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

    如果服务器启用了防火墙,则需要将sqlbrowser.exe和/或UDP端口1434置于异常中。

在您检查了第 1 至 4 步之后,您可能仍然会失败。这也可能发生在以下情况:

    您的服务器是集群或多宿主计算机上的命名实例 您的客户端是一台开启防火墙的 Vista 机器。

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

最后一点,当您使用 SNAC 时,针对同一问题的错误消息是: [SQL Native Client]SQL 网络接口:查找指定的服务器/实例时出错 [xFFFFFFFF]。

Microsoft 最近发布了一个指导演练,可以作为一站式服务解决与 SQL Server 的大多数连接问题:Solving Connectivity errors to SQL Server

【讨论】:

哈哈。在我们的实例中,我们的组织在新机器上安装了一个新实例并移动了所有旧数据库。现在这是在我们的开发盒上。出于某种原因,我们的 DBA 决定直接从我们的实时数据库中引用我们的开发框中的某些内容是个好主意,因此它与来自我们应用程序的连接字符串没有任何关系,但归根结底是事实找不到旧的服务器实例。你在这里把我推向了正确的方向。谢谢 打开 UDP 端口 1434 为我工作。谢谢。 关于 PortQry 的非常有用的通知【参考方案3】:

转到 window+R 并输入 services.msc 并按 Enter。

如果没有自动启动,则手动启动 SQL Server。

然后你尝试登录,它一定是有效的。

【讨论】:

为我工作,谢谢。【参考方案4】:

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

我解决它的方法是在DatabaseContext。通过基本构造函数传递我想使用的连接字符串的名称。

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

    public DbSet<SomeModel> SomeModels  get; set; 

【讨论】:

【参考方案5】:

答案就在错误信息中:

Error Locating Server/Instance Specified

基本上,您在连接字符串中使用了错误的服务器\实例,即这个位:

Data Source=MSSQL2008-1

错误且未指向服务器,或者服务器名称未解析为 IP 地址。其他两种可能性:(1) 运行 SQL Server 的机器上的 SQL Browser 服务没有运行,或者 (2) SQL 机器上的 Windows 防火墙(或其他防火墙)拒绝传入连接。

最终,如果服务器名正确,那么它就会变成网络问题,您需要找出客户端无法连接到服务器的原因(这比SQL Server更有可能是基本网络问题配置问题)。

【讨论】:

感谢您的回答,但正如我所说,我使用该连接字符串连接和检索数据,即使用户验证发生,我唯一怀疑的是角色提供程序类,所以我做了一些测试,但我没有解决错误。 抱歉没有回复我在代码的某个地方硬写了另一个连接字符串。还是谢谢 另外,如果您从命令行 sqlcmd 执行此操作,您可能缺少 -d yourdatabase【参考方案6】:

如果您使用的是 SQL Server 开发人员版,请将连接字符串中的“.\SQLEXPRESS”更改为您的计算机名称。

之前:

数据源=.\SQLEXPRESS;初始 目录=SchoolDB-EF6CodeFirst;集成 Security=True;MultipleActiveResultSets=True

之后:

数据源=DESKTOP-DKV41G2;初始 目录=SchoolDB-EF6CodeFirst;集成 Security=True;MultipleActiveResultSets=True

【讨论】:

【参考方案7】:

更改您的 .\SQLEXPRESS,并仅添加您的 SQL express 名称,它对我有用

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

【讨论】:

你拯救了我的一天..我在 2 多个小时内一直在寻找解决方案....上帝保佑你的思想.....【参考方案8】:

我遇到了同样的错误,我启动了 SQL Server Express 服务并且它工作正常。希望这会有所帮助。

【讨论】:

【参考方案9】:

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

【讨论】:

与此类似,我有“Server=.\\...”,我需要删除“.\”,因为我已经指定了 名称.【参考方案10】:

我们最近遇到了同样的问题。我们发现代码是在 machine.confg 文件中查找名为“LocalSqlServer”的连接字符串。我们添加了这一行,它运行良好。

【讨论】:

【参考方案11】:

我遇到了这个问题,并修复了它。问题似乎是这样的:

错误:

<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;" />

【讨论】:

【参考方案12】:

此问题是由 DNS 无法解析主机名引起的。尝试使用 IP 地址而不是“计算机名称”。

【讨论】:

我刚刚使用了一个IP地址,但无法连接。更改“.[instance name]”时,IP可以ping但从远程甚至本地计算机连接到SQL Server,而“[ip][instance name]”是不可能的。【参考方案13】:

就我而言,我搜索了服务。然后找到一个名为“SQL Server(SQLEXPRESS)的服务。然后右键单击它。选择属性。然后单击开始。就是这样。解决了这个问题。

【讨论】:

【参考方案14】:

这不是什么大问题,只需更改您的 服务器名称 查看服务器名称更改的位置:

如何找到服务器名称

    打开运行 写'cmd' 在控制台窗口“主机名”中写入。

你的服务器名称会告诉你

谢谢。

【讨论】:

【参考方案15】:

这个问题花了我大约一天的时间,在我的一个 ASP.NET MVC 项目中,幸运的是我在我的机器上而不是在生产环境中遇到了问题,所以比较 web.config 我看到并删除了错误消失了......一个真正的挑战将 SQL Server 错误 26 与此问题联系起来

【讨论】:

【参考方案16】:

同样的问题。就我而言,我解决了将项目设置为“启动项目”的问题。

【讨论】:

【参考方案17】:

遇到了同样的问题,然后我使用了没有./ 的连接字符串(比如DESKTOP-E53DUML 而不是这个./DESKTOP-E53DUML

【讨论】:

【参考方案18】:

原来机器上安装了 2 个版本的 SQL Server。 删除旧的解决了我这边的问题。

更多详情: 在启动期间,两个服务的服务都在尝试运行。 第一个加载的那个工作正常,阻止了第二个启动。 附言停止第一台服务器的服务并手动启动第二台服务器并不能正常工作。

【讨论】:

【参考方案19】:

打开您的 SQL Server 配置管理器并在 SQL Server 服务下启用 SQL Server 状态,如果它通过右键单击停止并单击开始。

【讨论】:

以上是关于SQL网络接口,错误:26 - 错误定位服务器/实例指定[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错

SQL2008 SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错解决方法

在 Visual Studio 中使用实体框架与 SQL Server 的连接问题

sql server 2008 在与 SQL Server 提示建立连接时出现与网络相关的或特定于实例的错误

在与SQL Server建立连接时出现与网络相关的或特定实例的错误

SQL 网络接口,错误:50 - 发生本地数据库运行时错误。指定的 LocalDB 实例不存在