我遇到了一个奇怪的问题,即连接尝试的剩余超时似乎通过多次尝试持续存在。
我有一个输入连接信息的简单窗口,带有连接和取消按钮。
当用户点击连接时,将执行以下代码:
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 应该已经这样做了吗?