Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие соединения с СУБД 
V
    Опции темы
MoLeX
Дата 24.3.2010, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



Привет.

Код

MySqlConnection connect = new MySqlConnection("server=127.0.0.1;port=3306;user=root;password=123;");
connect.Open();
MySqlCommand myCommand = new MySqlCommand("SELECT * FROM `information_schema`.`SCHEMATA` ORDER BY `SCHEMATA`.`SCHEMA_NAME` ASC", connect);
MySqlDataReader MyDataReader;
MyDataReader = myCommand.ExecuteReader();
while (MyDataReader.Read())
{
    comboBox1.Items.Add(MyDataReader.GetString(1));
}
connect.Close();


Как я понял, в конце работы должна закрыться сессия с базой данных. Но это не происходит.
SQL запрос показывает, что данный пользователь все еще находится на связи:
Код

SHOW PROCESSLIST

Полностью же соединение с ним закрывается после выхода из программы.
Как можно полностью закрыть соединение?!



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
mrbrooks
Дата 24.3.2010, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 5
Всего: 306



Код

//...
MyDataReader.Close();
connect.Close();

PM MAIL   Вверх
Экскалупатор
Дата 24.3.2010, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



может это пул? т.е. ты когда вызываешь Close() ты не убиваешь соединение, ты помечаешь что оно тебе сейчас не нужно. и оно помещается в пул, откуда при следующей попытке соединения будет подхвачено это освобожденное соединение. говорят что это позволяет немного экономить время, которое тратиться на создание и закрытие новых соединений.
если хочешь убить сразу то попробуй SQLConnection.Dispose();
PM MAIL ICQ   Вверх
MoLeX
Дата 24.3.2010, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



mrbrooks, не помогает

Цитата(Экскалупатор @  24.3.2010,  08:50 Найти цитируемый пост)
может это пул? т.е. ты когда вызываешь Close() ты не убиваешь соединение, ты помечаешь что оно тебе сейчас не нужно. и оно помещается в пул

Видимо так оно и есть. 
Аналог РНР фу-ции mysql_pconnect.

Цитата(Экскалупатор @  24.3.2010,  08:50 Найти цитируемый пост)
SQLConnection.Dispose(); 

не помогает


P.S.
Видимо надо вот так поступать (25 строка):
Код

namespace Test1
{
    public partial class Form1 : Form
    {
        MySqlConnection MyConnect;
        //MySqlCommand myCommand;
        //MySqlDataReader MyDataReader;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MyConnect = new MySqlConnection("server=127.0.0.1;port=3306;user=root;password=123;");
            MyConnect.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(MyConnect.ServerVersion.ToString());
            MyConnect.Close();

            MySqlConnection.ClearAllPools();
        }
    }
}


Добавлено через 10 минут и 44 секунды
Интересно вот что:
Код

MySqlConnection.ClearAllPools();


Должен уничтожить все пулы но этого не происходит. Т.е. при N-ом вызове подключения к СУБД создаются N сессий, которые должны быть все уничтожены, а на самом деле уничтожается только последний вызов(

Это сообщение отредактировал(а) MoLeX - 24.3.2010, 09:04


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Экскалупатор
Дата 24.3.2010, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



ну да немного странно. а чем мешает пул потоков?
PM MAIL ICQ   Вверх
MoLeX
Дата 25.3.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



Экскалупатор, да не чем))) Просто пытался разобраться почему так происходит. Вдруг не то, что то я делаю  smile 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
kobra
Дата 25.3.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Код

            using (MySqlConnection connect = new MySqlConnection("server=127.0.0.1;port=3306;user=root;password=123;"))
            {
                connect.Open();
                MySqlCommand myCommand = new MySqlCommand("SELECT * FROM `information_schema`.`SCHEMATA` ORDER BY `SCHEMATA`.`SCHEMA_NAME` ASC", connect);
                MySqlDataReader MyDataReader;
                MyDataReader = myCommand.ExecuteReader();
                while (MyDataReader.Read())
                {
                    comboBox1.Items.Add(MyDataReader.GetString(1));
                }
                connect.Close();
            }
даже можно connect.Close(); не писать. всеравно закроетsmile
PM MAIL   Вверх
MoLeX
Дата 26.3.2010, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



kobra, нет не закроет.
Единственное отличие этого способа: когда я жмакну второй раз подключиться, то подключусь под тем же ID. А отсоединение от БД не происходит.

Добавлено через 48 секунд
если же надо полностью отсоединиться, то только вот этот вариант (другого я не знаю)
Код

            MyConnect.Close();
            MySqlConnection.ClearAllPools();



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
azesmcar
Дата 26.3.2010, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



MoLeX

Может попробовать вызвать сборщик мусора?
PM   Вверх
MoLeX
Дата 26.3.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: нет
Всего: 140



azesmcar, а это как?  smile 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
azesmcar
Дата 26.3.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



Цитата(MoLeX @  26.3.2010,  09:37 Найти цитируемый пост)
а это как?  

прочитать страшное заклинание и вызвать таинственного сборщика мусора smile 
вот так smile 

Это сообщение отредактировал(а) azesmcar - 26.3.2010, 09:41
PM   Вверх
kobra
Дата 26.3.2010, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(MoLeX @  26.3.2010,  07:34 Найти цитируемый пост)
ClearAllPools();
отсоединение, это одно. закритие пула, другое. 
как помнью (за точность не ручаюс), если какоето время не ползоватся соедением из пула, ано само умирает.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1073 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.