1. ホーム
  2. sql-server

[解決済み] SQL Serverへの接続がうまくいかないことがある

2022-08-23 06:18:12

質問

ADO.Net アプリケーションが、ローカル ネットワーク上の別のサーバーに接続できる場合があります。 ある接続が成功するか失敗するかはランダムなようです。 接続は、フォームの接続文字列を使用しています。

Server=THESERVERTheInstance;Database=TheDatabase;User Id=TheUser; Password=ThePassword.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX。

というエラーが返されます。

接続タイムアウトが切れました。 ログイン前のハンドシェイクの確認応答を消費しようとした際に、タイムアウト時間が経過しました。

これは、pre-login handshakeが失敗したか、サーバーが時間内に応答を返せなかったことが原因である可能性があります。

このサーバーに接続しようとしたときに費やされた時間は - [Pre-Login] initialization=42030; handshake=0;

.NETアプリケーションは、次のコードを実行する小さなテストアプリです。

using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
    conn.Open();
    int rowCount = (int)cmd.ExecuteScalar();
}

テーブル は小さく、78行だけです。

しかし 同じマシン で、SSMS と接続文字列で指定されたユーザー ID/パスワードを使用して THESERVER に接続することができます。

ADO.Net アプリケーションからの接続は失敗するが、SSMS からの同一の資格情報では成功するのはなぜか。

どのように解決するのですか?

のIPv4アドレスではTCP/IPが有効になっているが、IPv6アドレスでは有効になっていないことがわかりました。 THESERVER .

どうやら、いくつかの接続試行は IPv4 を使用して終了し、他の試行は IPv6 を使用して終了したようです。

両方の IP バージョンで TCP/IP を有効にすると、問題が解決しました。

SSMS が機能したという事実は、偶然であることが判明しました (最初の数回の試みはおそらく IPv4 を使用しました)。SSMS を介して接続するいくつかの後の試みは、同じエラー メッセージをもたらしました。

追加の IP アドレスのために TCP/IP を有効にすること。

  • Sql Server 構成マネージャを起動します。
  • SQL Server ネットワーク構成] ノードを開きます。
  • MYSQLINSTANCE] の [プロトコル] を左クリックします。
  • 右側のペインで、TCP/IP を右クリックします。
  • プロパティ] をクリックします。
  • IP アドレス] タブを選択します。
  • リストされた各 IP アドレスについて、[Active] と [Enabled] が両方とも [Yes] であることを確認します。