Sql-Server

Windows 窗體應用程序的 SQL Server 2005 隨機登錄失敗

  • January 18, 2012

我們的 VS .NET 2008 Windows 窗體應用程序之一從多台客戶端電腦執行。應用程序隨機出現來自隨機機器和程式碼中隨機位置的登錄失敗。登錄幾乎每次都有效,但大約每十五分鐘一次,隨機使用者的 SQL Server 錯誤日誌中會出現一次錯誤。我們正在執行集群 SQL Server 2005 系統,並且數據庫處於 2005 (90) 模式。

SQL Server 錯誤日誌中出現以下錯誤:

‘App_Login’ 登錄失敗。

$$ CLIENT: XXX.XXX.X.XXX $$錯誤:18456,嚴重性:14,狀態:16。

以下錯誤是客戶端看到的:

System.Data.SqlClient.SqlException:向伺服器發送請求時發生傳輸級錯誤。(提供者:TCP 提供者,錯誤:0 - 現有連接被遠端主機強行關閉。)

應用程序使用的連接字元串是:

Data Source=XX.XXX.XXX.XXX;Network Library=DBMSSOCN;Initial Catalog=document7;User Id=App_Login;Password=PASSWORDHERE;

(注:XXX.XXX.X.XXX 和 XX.XXX.XXX.XXX 是 IP 地址)

  • “document7”和“master”數據庫處於多使用者模式。
  • 登錄名可以訪問“document7”和“master”。
  • 客戶端有時會遇到錯誤,但在失敗後重試相同的操作是成功的,沒有任何更改。
  • 我可以毫無問題地使用管理工作室使用“App_Login”。我可以毫無問題地訪問“document7”數據庫和“master”數據庫。
  • 我們有其他應用程序使用相同的連接字元串並且沒有問題。
  • 我嘗試使用預設數據庫“master”和“document7”登錄,兩種情況下的結果相同。

感謝您的時間和任何幫助!

在這種情況下,我認為 SQL Server 的錯誤不如客戶端錯誤那麼明顯。客戶端錯誤表明連接已經存在並被切斷,我認為這是對正在發生的事情的更準確描述。這篇博文解釋了這個問題。

基本上,池中的連接由於某種原因被切斷(可能是不活動或網路故障),並且客戶端不知道連接被切斷,直到它使用它執行另一個查詢。這就解釋了為什麼這個問題只發生在我們的 Windows 窗體的應用程序中,因為這個應用程序會使連接處於非活動狀態的時間比其他應用程序要長得多。此外,Web 應用程序與數據庫伺服器位於相同的物理位置,因此不會有太多的網路連接問題。

要解決這個問題,我只需要檢查錯誤並再次執行查詢。查詢應該第二次工作,因為它將自動接收新的 SPID 和全新的連接。

引用自:https://serverfault.com/questions/166348