我正在尝试连接到SQL Server 2014.大约一周前它似乎工作,现在它没有。系统团队最近升级到2014年。奇怪的是,我能够使用SQL Server Management Studio连接,ODBC和telnet。这只是C#的一个问题。此外,这个确切的程序在另一台服务器上运行,如编译/发布。它只是没有使用debug(或完全编译/发布)在我的系统上运行。
我检查了文档 - 禁用所有防火墙,STP检查服务器... nada
错误:
System.Data.dll中出现未处理的“System.Data.SqlClient.SqlException”类型异常
其他信息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)
我的C#代码:
namespace SQLTest
{
class Program
{
static void Main(string[] args)
{
string connectionString = ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString;
string OrganizationSqlStr = @"SELECT * FROM school";
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(OrganizationSqlStr, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.Write(reader["School_ID"] + " | ");
Console.Write(reader["title"] + "\n\r");
}
Console.ReadKey();
}
}
}
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>
答案 0 :(得分:1)
我会尝试强制.net程序使用tcp
http://www.connectionstrings.com/sqlconnection/
找到标有
的部分通过IP地址连接
Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;
Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
Network Library=DBMSSOCN
是神奇的糖。
另见:
APPEND:
如果仍然产生错误,那么可能会阻止您访问。
以下是用于确定的一般工具。
https://www.microsoft.com/en-us/download/details.aspx?id=24009
指定IP和端口号,它会告诉您端口被阻止或过滤。
我的个人历史记录是我们安装了一个新的路由器,它正在过滤端口号并停止我的sql server访问。 Portqueryui透露了这个问题。 PortQry工作&#34;外面&#34; sql server,所以网络人员不能因为缺乏连接而责备sql-server。
APPEND
OP在此回答的评论中发布了这个
portqry.exe -n db-alexandrite.domain.edu -e 1433 -p TCP exits with return code 0x00000000
这是你的问题。 &#34; db-alexandrite.domain.edu&#34;没有解决。
您可以通过更改&#34; db-alexandrite.domain.edu&#34;来修复它。是该机器的实际IP地址。
或弄清楚为什么&#34; db-alexandrite.domain.edu&#34;不解决。
答案 1 :(得分:0)
请您的团队检查他们是否已启用服务器的所有网络协议。应启用tcp或命名管道协议。
答案 2 :(得分:0)
此错误很有用:
(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
默认情况下,您的连接字符串或SqlConnection似乎希望使用命名管道提供程序连接到SQL服务器。
鉴于您的服务器最近已更改/升级,当然可能已禁用命名管道提供程序。 It's a common mistake
您可以通过altering your connection string强制您的连接使用简单的TCP而不是命名管道:
server=tcp:mysqlserver.domain.com;...
答案 3 :(得分:0)
我最近用sql建立了一个新的测试服务器,并通过了常用的检查表。
这4个步骤将消除大多数连接问题。但是,在新服务器上,Windows Defender将默认阻止。我不得不在防御者中禁用私人和公共个人资料。由于我们不使用windows defender,这没关系。但是,如果你依赖它,那么你需要创建一个规则。
答案 4 :(得分:-1)
<add name="SQLConn" connectionString="Data Source=SERVER;Integrated Security=False;User ID=USER;Password=PASSWORD;Initial Catalog=DATABASE" providerName="System.Data.SqlClient" />