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

时间:2012-12-06 23:33:42

标签: asp.net sql-server-2008 asp.net-membership membership-provider roleprovider

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

  

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

说明:

  

执行当前期间发生了未处理的异常   网络请求。请查看堆栈跟踪以获取更多信息   错误以及它在代码中的起源。

例外详细信息:

  

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

来源错误:

  

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

我尝试了很多东西,我在 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>

请有人帮忙弄清楚什么是错的?

18 个答案:

答案 0 :(得分:41)

如果从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协议

enter image description here

答案 1 :(得分:17)

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

以下证明非常有用,主要来自this blog post

此错误消息实际上非常具体,解决方案非常简单。

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

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

总之,我们收到此错误消息的原因是客户端堆栈无法从SQL浏览器接收SSRP响应UDP数据包。为了隔离确切的问题,请按照以下步骤操作:

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

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

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

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

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

  6. 在检查步骤1到4之后,您可能仍然会遇到一个角落情况。还可能发生在以下情况:

    1. 您的服务器是群集或多宿主计算机上的命名实例
    2. 您的客户端是启用了防火墙的Vista计算机。
    3. 可以证明有用的工具(它对我有用)是PortQry。如果此命令返回信息并且它包含您的目标实例,那么您可以排除上面的可能性4)和5),这意味着您确实运行了SQL浏览器并且您的防火墙不会阻止SQL Browser UDP数据包。在这种情况下,您可以检查其他可能的问题,例如错误的连接字符串。

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

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

答案 2 :(得分:7)

答案在错误信息中:

Error Locating Server/Instance Specified

基本上,你在连接字符串中有错误的server \ instance,即这一位:

Data Source=MSSQL2008-1

错误且未指向服务器,或者servername未解析为IP地址。另外两个可能性:(1)运行SQL Server的框上的SQL浏览器服务未运行或(2)SQL框上的Windows防火墙(或其他防火墙)拒绝传入连接。

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

答案 3 :(得分:7)

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

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

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

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

答案 4 :(得分:3)

转到window + R并键入services.msc,然后按Enter。

如果未自动启动,请手动启动SQL Server。

然后您尝试登录,它一定可以使用。

答案 5 :(得分:2)

我遇到了同样的错误,我启动了SQL Server Express服务,但它确实有效。希望这会有所帮助。

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

我们最近遇到了同样的问题。我们发现代码正在寻找名为&#34; LocalSqlServer&#34;的连接字符串。在machine.confg文件中。我们添加了这一行,它运行正常。

答案 8 :(得分:1)

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

enter image description here

如何查找服务器名称

  1. 公开运行
  2. 写'cmd'
  3. 在控制台窗口“主机名”中写入。

您的服务器名称将显示给您

谢谢。

答案 9 :(得分:1)

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

之前:

  

数据源=。\ SQLEXPRESS;初始   Catalog = SchoolDB-EF6CodeFirst;集成   安全性= True; MultipleActiveResultSets = True

之后:

  

数据源= DESKTOP-DKV41G2;初始   Catalog = SchoolDB-EF6CodeFirst;集成   安全性= True; MultipleActiveResultSets = True

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

答案 13 :(得分: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;" />

答案 14 :(得分:0)

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

答案 15 :(得分:0)

遇到相同的问题,然后我使用了不带def parse_course_code(commands, records): if commands in course_rolls(records).keys(): print('Clashes with {}:'.format(commands)) return clashes(commands, records) else: print("Unknown course code") def clashes(course_code, records): unformatted_course_rolls = course_rolls(records) for course, prior_student_number in sorted(unformatted_course_rolls.items()): for prior_student_number_single in list(prior_student_number): if course_code == course: for code, student_number in sorted(unformatted_course_rolls.items()): for num in list(student_number): if prior_student_number_single == num and course != code: print("In {} and {} ".format(course, code)) print(" {}: \n".format(num)) def main(): while True: command = input('Command: ') if command == 'quit': print('Adios') break else: parse_course_code(commands, records) main() 的连接字符串(如./而不是此DESKTOP-E53DUML

答案 16 :(得分:0)

事实证明,计算机上安装了2个版本的SQL Server。
删除旧的文件就解决了我这方面的问题。

更多详细信息:
在启动期间,这两个服务的服务都试图运行。
而第一个被加载的那个正在正常工作,而第二个被阻止了。
附言停止第一台服务器的服务并手动启动第二台服务器也无法正常工作。

答案 17 :(得分:0)

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