Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 316
1

Ошибка при подключении к локальной базе данных

22.06.2020, 15:25. Показов 1197. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день
Пишу приложение, в котором необходимо записывать данные в локальную базу данных. Всё прекрасно записывается, считывается, редактируется, но бывают случаи когда при первом включении возникает следующая ошибка:
"При установлении соединения с sql server произошла ошибка, связанная с сетью или с определенным экземпляром. сервер не найден или недоступен. убедитесь, что имя экземпляра указано правильно и что на sql server разрешены удаленные соединения. (provider: sql network interfaces, error: 50 - произошла ошибка local database runtime.Во время запуска экземпляра localdb произошла ошибка: ошибка запуска процесса SQL Server".
Подскажите, в чем может быть проблема?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
                using (SqlConnection connection = new SqlConnection(connStr))
                {
                    SqlCommand command = new SqlCommand(sql, connection);
                    command.Parameters.AddWithValue("@number", uniq_id);
                    command.Parameters.AddWithValue("@Ses", sessi);
                    command.Parameters.AddWithValue("@Num", type);
                    command.Parameters.AddWithValue("@Name_file", File);
                    connection.Open();
 
                    try
                    {
                        int count_write = command.ExecuteNonQuery();
 
                        if (count_write == 1)
                        {
                            logFile.writeLog_toFile("write_toDB", "Execute command", "success", "Выполнен запрос в БД: " + command.CommandText); //запись лога 
                        }
                    }
                    catch (Exception err)
                    {
                        MessageBox.Show("Ошибка во время выполнения запроса в БД: " + err);
                    }
                }
Миниатюры
Ошибка при подключении к локальной базе данных  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2020, 15:25
Ответы с готовыми решениями:

Ошибка при подключении к локальной базе
Добрый день, имеется следующая проблема. В папке с проектом лежит .mdf файлик базы данных,...

Ошибка при подключении к базе данных
Вылетает вот такое чудо -> "a database with the same name exist or specified file cannot be...

Ошибка при подключении к базе данных
Здравствуйте! У меня такая проблема. Я разработал приложение windows forms с использованием entity...

Ошибка при подключении к SQL базе данных при переносе программы
Я добавил базу данных SQL "*.mdf" к проекту. Если использовать параметры строки подключения типа:...

8
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 316
07.08.2020, 15:42  [ТС] 2
Так и не нашел я решение Подскажите, пожалуйста, в чем моя ошибка
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
07.08.2020, 19:10 3
Цитата Сообщение от MAKC13 Посмотреть сообщение
но бывают случаи
При возникновении SQLException делайте паузу, а потом снова пробуйте (программно), а сообщение можно выдавать после 3-х раз.
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 316
12.08.2020, 16:59  [ТС] 4
ashsvis, а с чем может быть связана эта ошибка? Возможно ее устранить как-то возможно?
0
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
13.08.2020, 06:16 5
Цитата Сообщение от MAKC13 Посмотреть сообщение
а с чем может быть связана эта ошибка?
В тексте ошибки расписывается с чем это может быть связано. Я вообще не понимаю, зачем это нужно явно повторять, когда вы сами можете на своём скриншоте прочитать, благо, что даже на русском.
0
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 316
13.08.2020, 12:16  [ТС] 6
Usaga, я вижу, что там написано. Но просто не понимаю, из-за чего появляется эта ошибка. Она обычно возникает только при первом включении компьютера и если он постоит и запустить программу погодя, то этой ошибки не будет. Такое чувство как будто sql server express запуститься не успевает. Возможно сделать как-то проверку на запуск сервера?
0
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
13.08.2020, 13:41 7
Цитата Сообщение от MAKC13 Посмотреть сообщение
Такое чувство как будто sql server express запуститься не успевает
Может быть, если у вас какой-то совсем в хлам медленный ПК, с HDD умирающим и ОС забита другими службами под завязку.

Но в любом случае, это уже не косяк вашего приложения.
0
916 / 497 / 201
Регистрация: 08.10.2018
Сообщений: 1,541
Записей в блоге: 11
13.08.2020, 17:54 8
Цитата Сообщение от MAKC13 Посмотреть сообщение
Возможно ее устранить как-то возможно?
Делайте несколько автоматических попыток соединения с сервером, это нормально для такого вида приложений.

Добавлено через 21 минуту
как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using (SqlConnection connection = new SqlConnection(connStr))
{
    SqlCommand command = new SqlCommand(sql, connection);
    command.Parameters.AddWithValue("@number", uniq_id);
    command.Parameters.AddWithValue("@Ses", sessi);
    command.Parameters.AddWithValue("@Num", type);
    command.Parameters.AddWithValue("@Name_file", File);
    int n = 3;
    while (n > 0)
    {
       try
       { 
          connection.Open();
          try
          {
               int count_write = command.ExecuteNonQuery();
               if (count_write == 1)
               {
                    logFile.writeLog_toFile("write_toDB", "Execute command", "success", "Выполнен запрос в БД: " + 
 command.CommandText); //запись лога 
               }
          }
          catch (Exception err)
          {
               MessageBox.Show("Ошибка во время выполнения запроса в БД: " + err);
          }
          break;
      }
      catch (SQLException err)
      {
           n--;
           Thread.Sleep(1000); // например
           continue;
      }
    }
}
1
1496 / 1238 / 244
Регистрация: 04.04.2011
Сообщений: 4,362
13.08.2020, 20:02 9
При попытке установить соединение SQL-сервером вступает в силу время ожидания ответа. Оно есть по-умолчанию для каждого провайдера, но можно его "регулировать".
Это время провайдера может быть меньше времени, установленного на самом сервере, поэтому надо либо "подкрутить" сервер, либо узнать у сисадмина серверное время и подкрутить время на "провайдере".
В большинстве случаев все решается на клиенте, т.е. надо просто снабдить его некоторым "терпением", как было указано выше.

Далее. Незачем при каждом чихе устанавливать соединение, вполне достаточно установить его при первом обращении к БД, а в дальнейшем все запросы слать уже в контексте этого открытого соединения. Не нужно беспокоиться о том, что сервер слишком напряжется от лишнего "висячего" коннекшена. Он прекрасно разбирается с миллионами соединений и не кашляет
А вот открытые серверные курсоры действительно сервер напрягают, особенно если там по нескольку тысяч записей. Метод наши дедов и пресловутыми Table-ами реально тормозит всю систему. Избегайте их и используйте разовые селекты и точечные апдейты, инсерты и делеты с последующим селектом и будет Вам счастье

Добавлено через 23 минуты
Есть несколько простых правил, соблюдая которые можно избежать "тормоза" на SQL-сервере.

1. Не тащите с сервера слишком много данных.
Еще не родился тот юзер, который может эффективно взаимодействовать с таблицей из нескольких тысяч, а то и десятков тысяч записей. Стройте интерфейс с функциями поиска, сортировки, группировки и фильтрации данных.

2. Избегайте "эксельную" технологию внесения правок в таблицы - помимо геморроя с обработкой всевозможных событий получите тучу непоняток со стороны юзеров, которые будут жаловаться на то, что программа "теряет данные" или "неверно запоминает". Любое изменение - в модальном окне !

3. Сложные изменения в БД, касающихся нескольких таблиц, старайтесь реализовать через StoredProc на стороне сервера. Если это невозможно (сисадмин - Ваш личный враг), то либо пишите скрипты и выполняйте их, либо учитесь управлять транзакциями. Это непросто, но, научившись, Вы поймете как это прекрасно !

4. Обрабатывайте исключения после ЛЮБОГО запроса к серверу. ЛЮБОГО ! Помните, что SQL-сервер как любимая женщина - любит-то любит, но может свалить в любой момент Т.е. может отлететь коннектор, умереть ПК с сервером, злобный электрик перережет провод, на подстанции слетит генератор и пропадет свет в серверной, уборщица мокрой тряпкой ткнет в попу Вашего системного блока и т.д. Мир полон неожиданностей, 99% из которых мы не можем предвидеть.

5. Не бойтесь держать открытыми несколько соединений к одному серверу и через них выполнять разные запросы к серверу в фоновом режиме (асинхронно). Это не только может сделать работу с Вашим приложением приятной для юзера, но и существенно повысит эффективность Вашего приложения в целом. Особенно, если оно будет работать на сотнях ПК (например, в крупной организации или корпорации)
1
13.08.2020, 20:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2020, 20:02
Помогаю со студенческими работами здесь

Ошибка при подключении к базе данных
Добрый день. При попытке к подключению к базе данных MySQL появляется множество ошибок. При...

Ошибка при подключении к базе данных
Здравствуйте, решил подружить LUA и Oracle, поставил zerobrane studio и OracleXE - бесплатный, ...

Ошибка при подключении к базе данных
При запуске сайта выкидывает ошибку : Fatal error: Class name must be a valid object or a string in...

Ошибка при подключении к базе данных
В общем ошибка найдена но не решена, потому что я даже не могу объяснить её, но попытаюсь, так как...

Ошибка при подключении к базе данных QtSql
Весь день ломаю голову над ошибкой, перечитал все что возможно и изменял все что только можно, но...

Неопознанная ошибка при подключении к базе данных
Друзья, подскажите пожалуйста почему может возникать такая ошибка (на скрине) ? Куда копать ? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru