Текущая версия: Microsoft Visual Studio Professional 2019 Версия 16.5.4
У меня есть приложение для инвентаризации локальных настольных систем, которое я написал в C# несколько месяцев go. Все было просто отлично, но сегодня появилось обновление Windows и обновление Visual Studio 2019, поэтому я пошел дальше. Теперь я "СЛУЧАЙНО" получаю ошибки подключения к локальной БД. Это означает, что иногда это работает, снова запустите приложение, и оно не сможет подключиться к БД.
Ошибка:
Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=16063; handshake=8123;
Строка подключения ( Я автоматически заменяю | DataDirectory | на путь к приложению ):
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MYDB.mdf;Integrated Security=True
Я должен добавить «; Connect Timeout = 30» в конец строки подключения, затем приложению требуется почти 20 секунд для подключения к БД , В БД всего 3 таблицы, не более 40 записей в каждой таблице. Кто-нибудь еще имел эту проблему раньше? Я не собираюсь принимать приложение, требующее 20 секунд для подключения к БД, которая является локальной для моей машины windows 10.
РЕДАКТИРОВАТЬ: я знаю, что будут люди, спрашивающие, как я подключаюсь. Это более крупный метод, созданный для доступа к любому виду БД MS.
//set connection
SqlConnection connection = new SqlConnection(ConnectionString);
//set command
SqlCommand command = new SqlCommand()
{
Connection = connection,
//even though it's set to procedure, the Microsoft.Security
//will still have warnings, because the proc name is passed
//in, instead of a constant.
CommandText = storedProcedure,
CommandTimeout = CommandTimeout
};
//if the proc has parameters, pass them.
if (param != null)
{
command.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < param.Length; i++)
{
param[i].ParameterName = Clean(param[i].ParameterName, CleanType.UnquotedString);
if(param[i].DbType == DbType.String)
param[i].Value = Clean(param[i].Value.ToString(), CleanType.UnquotedString);
command.Parameters.Add(param[i]);
}
}
else
command.CommandType = CommandType.Text;
//open connection
connection.Open(); //<---- This is what Times Out