接続試行の残りのタイムアウトが複数回試行しても持続しているように見えるという奇妙な問題が発生しています。
接続情報を入力する単純なウィンドウがあり、接続ボタンとキャンセル ボタンがあります。
ユーザーが接続を押すと、次のコードが実行されます。
DisableControls();
if((bool)AutoAuthenticated.IsChecked)
{
((MainWindow)Owner).myConnection = new System.Data.SqlClient.SqlConnection
("server="+ServerName.Text + ";"+
"Trusted_Connection=yes;" +
"database="+DatabaseName.Text + ";" +
"connection timeout=3");
}
else
{
((MainWindow)Owner).myConnection = new System.Data.SqlClient.SqlConnection
("user id="+UserName.Text+";" +
"password="+Password.Password+";" +
"server="+ServerName.Text+";" +
"Trusted_Connection=no;" +
"database="+DatabaseName.Text+";" +
"connection timeout=3");
}
await ConnectToServer();
これは ConnectToServer 関数です。
private async Task ConnectToServer()
{
//using (((MainWindow)Owner).myConnection)
//{
await ((MainWindow)Owner).myConnection.OpenAsync();
//}
}
現時点では、タイムアウト プロパティはテスト用に小さくなっています。
とにかく、接続中にユーザーがキャンセルボタンを押した場合:
private void Cancel_Click(object sender, RoutedEventArgs e)
{
if (((MainWindow)Owner).myConnection != null &&
((MainWindow)Owner).myConnection.State ==
System.Data.ConnectionState.Connecting)
{
((MainWindow)Owner).myConnection.Close();
EnableControls();
}
else
{
this.Close();
}
}
ここで、偽の詳細を入力してタイムアウトのままにすると、「ネットワーク パスが見つかりませんでした」という例外がキャッチされます。
この後に再度接続しようとすると (または、キャンセル ボタンを押す速さによっては、次の試行の後で)、接続ボタンを押した後、想定されていた時間を待たずに、ほぼ瞬時にタイムアウトします。に。
ここで何が間違っているのかわかりません.SqlConnectionオブジェクトをリセットしようとしましたが、接続を押すたびに新しいSqlConnectionに設定すると、すでにこれを行う必要があると思いました?