当我尝试连接SQL Server时,我得到以下错误:

在建立与SQL Server的连接时,发生了与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确,SQL Server是否配置为允许远程连接。(提供商:Named Pipes提供商,错误:40 -无法打开到SQL Server的连接)

当我试图在Visual Studio 2010中将数据库配置为gridview时抛出此错误。我不知道如何调试这个错误。

如何调试此错误?除了错误消息中提到的步骤之外,我还应该采取哪些步骤来确定这里到底发生了什么?


当前回答

这也可能是简单的事实,你的数据库实际上不是MS SQL Server。例如,如果你的数据库实际上是MySql,你试图用System.Data.SqlClient连接它,你会得到这个错误。

到目前为止,大多数ADO的例子。Net将用于MSSQL,没有经验的用户可能不知道你不能在MySql中使用SqlConnection, SqlCommand等。

虽然所有的ADO。Net数据提供程序遵循相同的接口,您必须使用为您的数据库提供程序。

其他回答

把我的高度好评的评论作为一个截图的回答。

我在这上面花了很多时间,最后对我有用的是:

1)打开Sql Server Configuration Manager—> Sql Server Network Configuration—> Protocols for <(INSTANCE)>—> TCP/IP(双击它)。

2)选择“——> IP Addresses(Tab)”。

3)转到最后一个条目IP All,并提到TCP端口1433。

4)按“Win+R”,输入services.msc。

5)现在重启SQL Server <(INSTANCE)>。

在这之后,问题解决了!

当我在Visual Studio中遇到这个错误时,

"在建立与SQL Server的连接时,发生了与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名称是否正确,SQL Server是否配置为允许远程连接。(提供商:命名管道提供商,错误:40 -无法打开到SQL Server的连接)"

...它是在执行下面的c#代码期间,它试图获取我的SQL Server数据以在网格中显示。中断恰好发生在表示connect.Open()的行上:

        using (var connect = Connections.mySqlConnection)
        {
            const string query = "SELECT Name, Birthdate, Narrative FROM Friends";
            using (var command = new SqlCommand(query, connect))
            {
                connect.Open();
                using (var dr = command.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // blah
                    }
                }
            }
        }

It was inexplicable because the SQL query was very simple, I had the right connection string, and the database server was available. I decided to run the actual SQL query manually myself in SQL Management Studio and it ran just fine and yielded several records. But one thing stood out in the query results: there was some improperly encoded HTML text inside a varchar(max) type field within the Friends table (specifically, some encoded comment symbols of the sort <!-- lodged within the "Narrative" column's data). The suspect data row looked like this:

Name    Birthdate    Narrative
====    =========    ============== 
Fred    21-Oct-79    &lt;!--HTML Comment -->Once upon a time...

注意编码的HTML符号“&lt;”,它代表一个“<”字符。不知何故,它进入了数据库,而我的c#代码无法接收它!它每次都失败在connect.Open()行!在我手动编辑数据库表Friends中的一行数据并输入解码后的“<”字符之后,一切都正常了!这一行应该是这样的:

Name    Birthdate    Narrative
====    =========    ============== 
Fred    21-Oct-79    <!--HTML Comment -->Once upon a time...

我使用下面这个简单的UPDATE语句编辑了一个不好的行。但如果你有几行违规的HTML编码,你可能需要一个更详细的UPDATE语句,使用REPLACE函数:

UPDATE Friends SET Narrative = '<!--HTML Comment -->Once upon a time...' WHERE Narrative LIKE '&lt%'

因此,这个故事的寓意是(至少在我的情况下),在将HTML内容存储到数据库之前清理它,这样您就不会在第一时间得到这个神秘的SQL Server错误!(如果你需要更多信息,正确地消毒/解码你的HTML内容是另一个值得单独在StackOverflow搜索的讨论主题!)

如果SQL Server正在运行,您仍然得到一个错误; 当打开SQL Server时,显示的不是默认的服务器名 选项下选择以\SQLEXPRESS结尾的服务器名 服务器名称->浏览更多信息->数据库引擎选项。

为什么这个错误是如此烦人和嘈杂,只是因为它可以发生在不同的情况。

我已经做了上面所有的方法,但还是很糟糕。所以,在向下浏览之前,确保你和我做了同样的事情。

也许我不能立即解决你的问题,但我可以给你指明一个方向或思路(最后滑下来的那个人)。我已经开始思考我的运行程序的错误发生后,我确保实例名是明确正确的,并设置我的数据库,以允许远程控制以下的方法。之后,我怀疑我的SQL连接代码片段发生了错误。

我的问题解决方案:

检查我的sqlconnection函数

单击以查看其配置

新建连接

选择你的服务器名

对我来说,思考在联系的过程中到底发生了什么是有效的。希望我的想法能引导你改正错误。

用于远程服务器数据库连接。 如果没有一个答案让你满意,很可能你还没有添加SQL端口1433到Windows防火墙例外。请执行以下步骤。

进入开始菜单,打开运行类型WF.msc。 在Windows防火墙高级安全。 添加入站规则。 添加1433端口。 说出你的规则。 重新启动SQL服务。

有关连接远程服务器的问题的完整指南。处理连接SQL Server数据库的故障。