簡體   English   中英

無法在C#程序中連接到SQL Server,但是系統能夠連接

[英]Unable to connect to SQL Server in a C# program but system is able to connect

我正在嘗試連接到SQL Server2014。大約一個星期前,它似乎可以工作,但現在卻不起作用。 系統團隊最近確實升級到2014年。奇怪的是,我能夠使用SQL Server Management Studio進行連接,ODBC和telnet。 這只是C#的問題。 此外,此精確程序作為編譯/發行版在另一台服務器上運行。 它只是沒有使用調試(或完全編譯/發布)在我的系統上運行。

我檢查了文檔-禁用了所有防火牆,讓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>

我會嘗試強制.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是神奇的糖。

也可以看看:

DBMSSOCN代表什么?

附加:

如果仍然產生錯誤,則可能是某些原因阻止了您的訪問。

這是確定的通用工具。

https://www.microsoft.com/en-us/download/details.aspx?id=24009

指定IP和端口號,它將告訴您該端口被阻止或過濾。

我的個人歷史是我們安裝了一個新路由器,該路由器正在過濾端口號並停止對SQL Server的訪問。 portqueryui揭示了問題。 PortQry在sql服務器的“外部”工作,因此網絡人員不能責怪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”無法解析。

請您的團隊檢查他們是否已啟用服務器的所有網絡協議。 應該啟用tcp或命名管道協議。

此錯誤是有幫助的:

(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

似乎您的連接字符串(默認情況下為SqlConnection)想要使用命名管道提供程序來連接到SQL Server。

鑒於您的服務器是最近更改/升級的,因此有可能禁用了命名管道提供程序。 這是一個常見的錯誤

您可以通過更改連接字符串來強制連接使用簡單的TCP而不是命名管道:

server=tcp:mysqlserver.domain.com;...

我最近用sql設置了一個新的測試服務器,並通過了通常的清單。

  1. 確保允許遠程連接。
  2. 確保選擇集成模式同時使用Windows和Sql Server登錄名。
  3. 確保在sql配置管理器中啟用了端口1440 /您的端口和tcp /您的協議。
  4. 確保您的防火牆允許傳入和傳出。
  5. 確保您的連接字符串有效。

這4個步驟將消除大多數連接問題。 但是,在新服務器上,默認情況下Windows Defender將阻止。 我不得不在防御者中禁用私有和公開配置文件,因為它被阻止了。 由於我們不使用Windows Defender,所以可以。 但是,如果您依賴它,則需要創建一個規則。

<add name="SQLConn" connectionString="Data Source=SERVER;Integrated Security=False;User ID=USER;Password=PASSWORD;Initial Catalog=DATABASE" providerName="System.Data.SqlClient" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM