无法在C#程序中连接到SQL Server,但系统能够连接

无法在C#程序中连接到SQL Server,但系统能够连接,c#,sql-server,C#,Sql Server,我正在尝试连接到SQL Server 2014。大约一周前,它似乎还有效,但现在不行了。系统团队最近确实升级到了2014年。奇怪的是,我能够使用SQLServerManagementStudio连接、ODBC和telnet。这只是C#的问题。此外,这个程序在另一台服务器上以编译/发布的形式运行。它只是没有使用debug(或完全编译/发布)在我的系统上运行 我检查了文档--禁用了所有防火墙,让STP检查了服务器。。。娜达 错误: System.Data.dll中发生类型为“System.Data.

我正在尝试连接到SQL Server 2014。大约一周前,它似乎还有效,但现在不行了。系统团队最近确实升级到了2014年。奇怪的是,我能够使用SQLServerManagementStudio连接、ODBC和telnet。这只是C#的问题。此外,这个程序在另一台服务器上以编译/发布的形式运行。它只是没有使用debug(或完全编译/发布)在我的系统上运行

我检查了文档--禁用了所有防火墙,让STP检查了服务器。。。娜达

错误:

System.Data.dll中发生类型为“System.Data.SqlClient.SqlException”的未处理异常

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

我的C#代码:

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <connectionStrings>
        <add name="SQLConn" 
             connectionString="server=SERVER;database=DATABASE;uid=USERNAME;password=PASSWORD"/>
    </connectionStrings>
</configuration>

请您的团队检查是否已启用服务器上的所有网络协议。应启用tcp或命名管道协议。


<add name="SQLConn" connectionString="Data Source=SERVER;Integrated Security=False;User ID=USER;Password=PASSWORD;Initial Catalog=DATABASE" providerName="System.Data.SqlClient" />
此错误非常有用:

(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
您的连接字符串(默认情况下为SqlConnection)似乎希望使用命名管道提供程序连接到SQL server

鉴于您的服务器最近发生了更改/升级,指定的管道提供程序很可能已被禁用

您可以通过以下方式强制连接使用简单TCP而不是命名管道:


我将尝试强制.net程序使用tcp

找到标有

通过IP地址连接

Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;
Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
networklibrary=DBMSSOCN
是神奇的糖

另见:

附加:

如果这仍然产生错误,那么可能有什么东西阻止了您的访问

这里是确定的通用工具

指定IP和端口号,它会告诉您端口已被阻止或过滤

我个人的历史记录是,我们安装了一个新路由器,它正在过滤端口号并停止我的sql server访问。portqueryui透露了这个问题。PortQry在sql server的“外部”工作,因此网络人员不能因为缺乏连接而责怪sql server

附加

OP在这个答案的评论中发布了这一点

portqry.exe -n db-alexandrite.domain.edu -e 1433 -p TCP exits with return code 0x00000000
这是你的问题。“db alexandrite.domain.edu”未解析

您可以通过将“db alexandrite.domain.edu”更改为该机器的实际IP地址来修复它


或者找出“db alexandrite.domain.edu”无法解决的原因。

我最近用sql设置了一个新的测试服务器,并查看了通常的检查表

  • 确保允许远程连接
  • 确保您选择的集成模式同时使用Windows和Sql Server登录
  • 确保在sql configuration manager中启用了端口1440/您的端口和tcp/您的协议
  • 确保您的防火墙允许传入和传出
  • 确保您的连接字符串有效

  • 这4个步骤将消除大多数连接问题。但是,在新服务器上,默认情况下Windows Defender将阻止。我不得不禁用defender中的私人和公共配置文件,因为它处于阻止状态。因为我们不使用windows defender,所以这是可以的。但是,如果您依赖它,那么您需要创建一个规则。

    可能是一个明显的问题或注释,但是您是否用实际值替换了连接字符串中的
    数据库
    用户名
    密码
    @Harporsyney您是通过SQL帐户还是使用windows凭据连接到SQL server?如果使用SQL帐户,您的数据库是否配置为允许混合身份验证?此答案没有用处。此数据的上下文是什么?它应该放在配置文件中吗?你认为这将如何解决OP的问题?您需要提供更多信息。确定--系统似乎存在管道上的urning问题。我尝试了字符串并得到了此错误(您有什么建议吗?)System.Data.SqlClient.SqlException类型的未处理异常发生在System.Data.dll中。其他信息:建立到SQL Server的连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:0-提供的参数无效。)我附加了我的答案。您可能希望查看此问题的已接受答案(以了解sql server正在哪个端口上运行):首先,让我说声谢谢您的帮助。我真的很感激——因为这个lol,我感到非常紧张。好了,我运行了程序——找回了TCP端口1433(ms-sql-s服务):监听portqry.exe-n db-alexandrite.domain.edu-e 1433-p TCP出口,返回代码0x00000000。。我尝试了telnet、sqlstudio和ODBC——所有这些都很有效。这可能是我的真实ide吗?我当前的连接字符串如下:错误是System.Data.dll中发生的“System.Data.SqlClient.SqlException”类型的未处理异常。其他信息:在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:0-在数据库查找过程中发生不可恢复的错误。)
    Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;
    Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
    
    portqry.exe -n db-alexandrite.domain.edu -e 1433 -p TCP exits with return code 0x00000000