연결 시도의 남은 시간 초과가 여러 시도를 통해 지속되는 것 같은 이상한 문제가 발생했습니다.SqlConnection 제한 시간 초과가
연결 및 취소 버튼을 사용하여 연결 정보를 입력하는 간단한 창이 있습니다. 사용자 히트 연결하면
다음 코드를 실행 :
private async Task ConnectToServer()
{
//using (((MainWindow)Owner).myConnection)
//{
await ((MainWindow)Owner).myConnection.OpenAsync();
//}
}
Timeout 속성 테스트의 목적으로 지금 작 :
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 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();
}
}
및 시간 제한을두고, 그럼 내가 네트워크 경로를 찾을 수 없습니다 '와 예외를 catch . '
취소 버튼을 얼마나 빠르게 누르는가에 따라 다음 시도 이후에 다시 연결을 시도하면 연결 버튼을 누른 후 거의 즉시 시간 초과됩니다. 그것이 예정되었던 시간.
내가 여기서 잘못하고 있는지 잘 모르겠다. SqlConnection 개체를 재설정하려고했지만 SqlConnection에 연결할 때마다 새 SqlConnection에 대한 설정이 이미 이루어져야한다고 생각했다. ?
이것은 async-await과 아무런 관련이 없습니다. 맞습니까? SqlConnection.OpenAsyc 대신 SqlConnection.Open()을 호출하면 똑같은 일이 발생합니다. 맞습니까? –
해당 연결 문자열 건물 코드로 몇 개의 문자열을 작성하고 있는지 알고 계십니까? [string.Format] (http://msdn.microsoft.com/library/System.String.Format.aspx) 또는 [StringBuilder] (http://msdn.microsoft.com/library/System.Text. StringBuilder.aspx)은 큰 이점이 될 것이지만 SQL 연결 문자열을 구체적으로 작성하고 있으므로 [SqlConnectionStringBuilder] (http://msdn.microsoft.com/library/System.Data.SqlClient.SqlConnectionStringBuilder.aspx) –
'OpenAsync()'를 사용하여 응용 프로그램이 연결을 시도하는 동안 잠기지 않도록했습니다. 나는 방금 테스트를했고 방금 Open()을 사용하면 같은 일이 발생합니다.또한, '얼마나 많은 문자열을 만드는지 알고 계신가요?'라고 말하면, 내가 말하는 것이 어떻게 도움이 될지 모르겠습니다. 전달 된 매개 변수는 변경 될 수 있으므로 어쨌든이 함수가 호출 될 때마다 문자열을 다시 작성합니다. – Interminable