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

时间:2016-07-06 15:54:49

标签: c# sql-server

我正在尝试连接到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>

5 个答案:

答案 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是神奇的糖。

另见:

What does DBMSSOCN stand for?

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建立了一个新的测试服务器,并通过了常用的检查表。

  1. 确保允许远程连接。
  2. 确保选择集成模式同时使用Windows和Sql Server登录。
  3. 确保在sql配置管理器中启用了端口1440 /您的端口和tcp / your协议。
  4. 确保您的防火墙允许传入和传出。
  5. 确保您的连接字符串有效。
  6. 这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" />