Подключение к локальной БД завершается после Windows и обновления VS - PullRequest
0 голосов
/ 17 апреля 2020

Текущая версия: 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

1 Ответ

0 голосов
/ 17 апреля 2020

Похоже, LocalDB - это не тот инструмент, который вам нужен. Начиная с документов :

При подключении автоматически создается и запускается необходимая SQL Серверная инфраструктура

Звучит очень дорого и медленно.

Для вашего небольшого набора данных вам, вероятно, понадобится встроенный механизм БД, такой как SQLite. Действующая база данных Microsoft (чей жизненный цикл поддержки практически завершен) называется «SQL Server Compact» и не совпадает с «SQL Server Express LocalDB».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...