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

在建立与SQL Server的连接时,发生了一个与网络有关或与实例有关的错误。 建立与SQL Server的连接。没有找到该服务器或 无法访问。确认实例名称是正确的,并且 SQL Server被配置为允许远程连接。(提供者。SQL 网络接口,错误:26 - 定位服务器/实例错误

在执行当前的网络请求时发生了一个未处理的异常。 网络请求的执行过程中发生了一个未处理的异常。请查看堆栈跟踪以了解更多关于 以及它在代码中的来源。

异常的细节。

System.Data.SqlClient.SqlException。与网络有关的或 在建立与SQL Server的连接时,发生了与网络有关的或特定于实例的错误。 SQL服务器。没有找到该服务器或无法访问。验证 实例名称是否正确,以及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>

有谁能帮助我们找出问题所在?

3 个评论
Jogi
检查你的项目中的所有连接字符串。你可能看到的不仅仅是一个正确的连接字符串。它可能是另一个连接字符串,可能是不正确的。"检查你的项目中的所有连接字符串。
我有同样的问题,对我来说,问题是我的SQL服务器实例在监听一些不同的端口,而我没有在连接字符串中指定端口号。 connectionstring=server= databaseserver,port
asp.net
sql-server-2008
asp.net-membership
membership-provider
roleprovider
ivi.hamiti
ivi.hamiti
发布于 2012-12-07
19 个回答
MacGyver
MacGyver
发布于 2021-06-20
0 人赞同

如果你从Windows机器A连接到Windows机器B(安装有SQL Server的服务器),并得到这个错误,你需要做以下工作。

在机器B上。

1.) 打开名为 "SQL服务器浏览器 "的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 with tools。另外,我之前的评论是为了补充你的答案,因为MS官方文档没有提到在IPAll下设置端口:docs.microsoft.com/en-us/sql/database-engine/configure-windows/...
我的问题是打开名为 "SQL服务器浏览器 "的Windows服务并启动该服务
@Gerhard - 你是说这是你的解决方案?
Paul Zahra
Paul Zahra
发布于 2021-06-20
0 人赞同

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

以下内容被证明非常有帮助,主要取自这篇博文

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

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

每次客户端与SQL Server命名的实例进行连接时,我们都会向服务器机UDP 1434端口发送一个SSRP UDP数据包。我们需要这个步骤来了解SQL实例的配置信息,例如,启用的协议、TCP端口、管道名称等。如果没有这些信息,客户端就不知道如何连接,它就会以这个错误信息失败。

总而言之,我们得到这个错误信息的原因是客户端堆栈无法接收来自SQL浏览器的SSRP响应UDP数据包。为了分离出确切的问题,请按照以下步骤操作。

  • 确保你的服务器名称是正确的,例如,名称上没有错别字。

  • 确保你的实例名称是正确的,并且在你的目标机器上确实有这样一个实例。(请注意,有些应用程序会将 \ 转换为 )。

  • 确保服务器机器是可以到达的,例如,DNS可以被正确解析,你能够ping到服务器(不总是如此)。

  • 确保SQL浏览器服务在服务器上运行。

  • 如果服务器上启用了防火墙,你需要把sqlbrowser.exe和/或UDP 1434端口放入例外。

  • 有一个角落里的情况,在你检查了步骤1到4之后,你仍然可能失败。 它也可能发生在以下情况。

  • 你的服务器是集群上的一个命名的实例,或在一个多主机上的一个命名的实例。
  • 你的客户是一台开着防火墙的Vista机器。
  • 一个可能被证明有用的工具是PortQry(它对我来说是有用的)。如果这个命令返回的信息包含你的目标实例,那么你就可以排除上述4)和5)的可能性,这意味着你确实有一个SQL浏览器在运行,而且你的防火墙没有阻止SQL浏览器的UDP包。在这种情况下,你可以检查其他可能的问题,比如连接字符串不正确。

    最后说明一下,当你使用SNAC时,同样问题的错误信息是。 [SQL Native Client]SQL Network Interfaces:错误定位指定的服务器/实例[xFFFFFFFF]。

    微软最近发布了一个指导性指南,可以作为一站式服务来解决大多数与SQL Server的连接问题。解决与SQL Server的连接错误

    lol.在我们的例子中,我们的组织在一台新机器上安装了一个新的实例,并移动了所有的旧数据库。现在这是在我们的开发盒上。出于某种原因,我们的DBA决定从我们的实时数据库中直接引用我们的开发盒中的东西,这将是一个好主意,因此它不会与我们的应用程序的连接字符串有任何关系,然而它归结为一个事实,即无法找到旧的服务器实例。 你在这里给我指明了正确的方向。谢谢你
    打开UDP 1434端口对我来说是有效的。谢谢。
    关于PortQry的非常有用的通知
    Venkatesh K
    Venkatesh K
    发布于 2021-06-20
    0 人赞同

    转到window+R,输入services.msc并按回车。

    然后手动启动SQL服务器,如果没有自动启动。

    然后你尝试登录,它必须是有效的。

    对我来说是有效的,谢谢你。
    Kristian Nissen
    Kristian Nissen
    发布于 2021-06-20
    0 人赞同

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

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

    public class DatabaseContext : DbContext
        public DatabaseContext()
            : base("DefaultConnection") // <-- this is what i added.
        public DbSet<SomeModel> SomeModels { get; set; }
    
    Chris J
    Chris J
    发布于 2021-06-20
    0 人赞同

    答案就在错误信息本身。

    Error Locating Server/Instance Specified
    

    基本上,你在连接字符串中得到了错误的server/instance,即这部分。

    Data Source=MSSQL2008-1
    

    是错误的,没有指向服务器,或者服务器名称没有解析到一个IP地址。还有两种可能:(1)运行SQL Server的盒子上的SQL浏览器服务没有运行,或者(2)SQL盒子上的Windows防火墙(或其他防火墙)拒绝了进入的连接。

    最终,如果服务器名称是正确的,那么它就变成了一个网络问题,你需要找出客户端不能连接到服务器的原因(这将更有可能是一个基本的网络问题,而不是一个SQL Server配置问题)。

    谢谢你的回答,但正如我所说,我使用该连接字符串连接和检索数据,甚至用户验证也发生了,我唯一怀疑的是角色提供者类,所以我做了一些测试,但我没有解决这个错误。
    抱歉没有回复,我在代码的某个地方硬写了一个其他的连接字符串。
    另外,如果你是在命令行上做这个,sqlcmd,你可能缺少-d yourdatabase。
    emert117
    emert117
    发布于 2021-06-20
    0 人赞同

    如果你使用的是SQL Server的开发版,在连接字符串中把".\SQLEXPRESS "改为你的计算机名称。

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

    数据源=DESKTOP-DKV41G2;初始化 目录=SchoolDB-EF6CodeFirst;综合 Security=True;MultipleActiveResultSets=True

    Nosakhare George Ohonba
    Nosakhare George Ohonba
    发布于 2021-06-20
    0 人赞同

    改变你的.\SQLEXPRESS,并只添加你的SQL Express名称,它对我来说是有效的。

     <add name="BlogDbContext" connectionString="data source=your name here; initial catalog=CodeFirstDemo; integrated security=True" providerName="System.Data.SqlClient"/>
    
    你救了我的命。我找了两个多小时的解决方案....,上帝保佑你的思想.....。
    Hưng Ngô
    Hưng Ngô
    发布于 2021-06-20
    0 人赞同

    我也有同样的错误,我启动了SQL Server Express服务,它就成功了。希望这有帮助。

    RMuesi
    RMuesi
    发布于 2021-06-20
    0 人赞同

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

    与此类似,我有 "Server=.\<local_server>\<instance>...",其中我需要删除".\"。因为我已经指定了<local_server>名称。
    NathanPillai
    NathanPillai
    发布于 2021-06-20
    0 人赞同

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

    Ash
    Ash
    发布于 2021-06-20
    0 人赞同

    我也有这个问题,并且解决了。问题似乎是这样的。

    <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;" />
    
    user5362299
    user5362299
    发布于 2021-06-20
    0 人赞同

    这个问题是由DNS未能解决主机名引起的。尝试使用IP地址而不是 "计算机名称"。

    我只是用了一个IP地址,但无法连接。IP可以ping,但是当改变".[instance name]"白"[ip][instance name]"时,从远程甚至是本地机器连接到SQL服务器是不可能的。
    Exception handler
    Exception handler
    发布于 2021-06-20
    0 人赞同

    在我的案例中,我搜索了服务。然后找到一个名为 "SQL Server(SQLEXPRESS) "的服务。然后右键点击它。选择属性。然后点击启动。这就是全部。解决了这个问题。

    Munneb Ur Rehman
    Munneb Ur Rehman
    发布于 2021-06-20
    0 人赞同

    这不是一个大问题,只要改变你的服务器名称即可。 请看哪里可以更改服务器名称。

    如何找到服务器名称

  • 写'cmd'。
  • 在控制台窗口写入 "主机名"。
  • 你的服务器名称将显示你

    David
    David
    发布于 2021-06-20
    0 人赞同

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

    Antonio Santise
    Antonio Santise
    发布于 2021-06-20
    0 人赞同

    同样的问题。在我的案例中,我解决了将项目设置为 "启动项目 "的问题。

    Zain Fareed
    Zain Fareed
    发布于 2021-06-20
    0 人赞同

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

    Just Shadow
    Just Shadow
    发布于 2021-06-20
    0 人赞同

    结果发现机器上安装了两个版本的SQL Server。
    删除旧的版本后,我这边的问题就解决了。

    更多细节。