Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 06.09.2019
Сообщений: 21

Подключение не было закрыто. Подключение открыто

31.01.2022, 14:16. Показов 1312. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

При вызове функций, выскакивает исключение: "Подключение не было закрыто. Подключение открыто.".
При том, что в других функциях, построенных аналогично все работает и ошибок не возникает.
Перерыла и перепроверила все много раз и все равно не понимаю, почему в данном случае выскакивает это исключение.
Так же пыталась закрыть подключение непосредственно перед return, а не с помощью finally, в каждой функции, но ситуация не изменилась.
Подскажите пожалуйста.
Заранее спасибо.)

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
public (string Adm, int ID_Adm) GetAdmChat(int ID_Chata) //Администратор чата
        {
            try
            {
                string Adm = "";
                int ID_Adm = 0;
 
                command.CommandText = "SELECT ЧАТЫ.ID_СОТРУДНИКА_АДМ FROM ЧАТЫ WHERE ЧАТЫ.ID_ЧАТА = " + ID_Chata;
                connection.Open();
 
                command.CommandType = CommandType.Text;
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows) //Если такой адрес есть
                {
                    reader.Read();
 
                    ID_Adm = Convert.ToInt32(reader["ID_СОТРУДНИКА_АДМ"]);
                    Adm = NameUser(Convert.ToInt32(reader["ID_СОТРУДНИКА_АДМ"]));
 
                    reader.Close();
                }
                else
                {
                    reader.Close();
                }
 
                return (Adm, ID_Adm);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
            }
        }
        public (List<string> Uchastniki, List<int> ID_Uchastnikov) GetUchastChat(int ID_Chata) //Список участников чата
        {
            try
            {
                List<string> Uchastniki = new List<string>();
                List<int> ID_UchastChat = new List<int>();
 
                command.CommandText = "SELECT УЧАСТНИКИ_ЧАТА.ID_ПОЛЬЗОВАТЕЛЯ FROM УЧАСТНИКИ_ЧАТА WHERE УЧАСТНИКИ_ЧАТА.ID_ЧАТА = " + ID_Chata;
                connection.Open();
 
                command.CommandType = CommandType.Text;
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows) //Если такой адрес есть
                {
                    reader.Read();
 
                    ID_UchastChat.Add(Convert.ToInt32(reader["ID_ПОЛЬЗОВАТЕЛЯ"]));
                    Uchastniki.Add(NameUser(Convert.ToInt32(reader["ID_ПОЛЬЗОВАТЕЛЯ"])));
 
                    reader.Close();
                }
                else
                {
                    reader.Close();
                }
 
                return (Uchastniki, ID_UchastChat);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
            }
        }
        public (List<string> SpisUch, List<int> ID_Uch) GetUchChat(int ID_Chata) //Список ВСЕХ участников чата
        {
            try
            {
                List<string> SpisUch = new List<string>();
                List<int> ID_Uch = new List<int>();
 
                //Получаем ID администратора чата
                var ResAdm = GetAdmChat(ID_Chata);
 
                //т.к. администратор у 1 чата только 1, то без цикла 
                SpisUch.Add(ResAdm.Adm);
                ID_Uch.Add(ResAdm.ID_Adm);
 
               var ResUchast = GetUchastChat(ID_Chata);
 
                //т.к. участников может быть больше 1
                for(int i = 0; i < ResUchast.ID_Uchastnikov.Count; i++) //Список ID и ФИО одинакового размера
                {
                    SpisUch.Add(ResUchast.Uchastniki[i]);           //Добавляем ФИО
                    ID_Uch.Add(ResUchast.ID_Uchastnikov[i]);        //Добавляем ID
                }
 
                return (SpisUch, ID_Uch); 
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
            }
        }
Добавлено через 17 минут
Ошибка обнаружена.
Вызывала метод, который тоже подключается к БД, при открытом подключении.
Почему-то не обратила на него внимание сразу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.01.2022, 14:16
Ответы с готовыми решениями:

Ошибка при работе с БД: Подключение не было закрыто. Подключение открыто
Здравствуйте! Столкнулся с проблемой. Вскакивает ошибка при работе с БД, когда проект запускаю из-под среды Подключение не было закрыто....

Подключение к БД не было закрыто
Подскажите в чем проблема, вроде открываю и закрываю подключение, но пишет ошибку: &quot;Подключение не было закрыто. Подключение...

Закрыто ли подключение
Подскажите, пожалуйста. когда я использую конструкцию using (OracleConnection connection = new OracleConnection(@InitiationString)) ...

2
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
31.01.2022, 14:21
Tora190, что бы подключение само закрывалось, вот так его оформляйте
C#
1
2
using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
{ ... }
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
31.01.2022, 21:33
Вы либо открывайте подключение один раз при запуске приложения и в дальнейшем просто его используете, либо открывайте и закрывайте его в каждом блоке кода, где идет обмен с, как указал Andrey-MSK
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2022, 21:33
Помогаю со студенческими работами здесь

Почему подключение закрыто?
не могу понять почему подключение закрыто

Изменять свойство "ConnectionString" не разрешается. Подключение открыто
доброй ночи Появляется непонятная ошибка Подключение не было закрыто. Подключение открыто. В базе ACCESS таблица с данными разного...

Отслеживание состояния долчерних окон MDI открыто/закрыто
Пытаюсь написать Редактор схем на OpenGL Tao Framework. (Урок по OpenGL который использую...

RDO подключение к MySQL - как узнать, было ли установлено подключение
сделал подключение через rdo используя драйвер - odbc connector mysql 3.51 пример: Dim conn As New rdoConnection Dim qr As New...

Определить, закрыто заведение или открыто
Здравствуйте. Подскажите, как лучше реализовать следующее (или может уже есть готовое решение)? В админке указываются часы работы...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru