Форум программистов, компьютерный форум CyberForum.ru

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
 
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
#1

Проверка на подключение к базе - C#

06.12.2012, 23:28. Просмотров 5001. Ответов 24
Метки нет (Все метки)

Доброго времени суток!

Как проверить, подключен к базе или нет?

Подключаюсь обычно так:
C#
1
2
3
4
5
settings settings = new settings();
string Connectio = @"server=" + settings.textBox1.Text + ";" + "user=" + settings.textBox2.Text +
";" + "database=" + settings.textBox4.Text + ";" + "password=" + settings.textBox3.Text + ";charset=utf8;";
MySqlConnection MyConnection = new MySqlConnection(Connectio);
MyConnection.Open();
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
06.12.2012, 23:40     Проверка на подключение к базе #2
SuLLeN, выполни запрос
SQL
1
SELECT 1
adm_loro
Заблокирован
07.12.2012, 18:16     Проверка на подключение к базе #3
C#
1
connection.State == ConnectionState.Open
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
07.12.2012, 20:40  [ТС]     Проверка на подключение к базе #4
Цитата Сообщение от nio Посмотреть сообщение
выполни запрос
А что он дает?
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.12.2012, 20:48     Проверка на подключение к базе #5
Цитата Сообщение от SuLLeN Посмотреть сообщение
А что он дает?
Если выполняется, значит подключение есть
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
08.12.2012, 09:04  [ТС]     Проверка на подключение к базе #6
Цитата Сообщение от nio Посмотреть сообщение
Если выполняется, значит подключение есть
По сути, так можно любой запрос отправить, а как сделать так, что бы с ошибкой не вылетало, а выдавало в мес.бокс "Нет подключения"?
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.12.2012, 10:54     Проверка на подключение к базе #7
SuLLeN, тебе уже adm_loro показал в посте 3. Но этот способ не самый лучший: если подключение было закрыто по инициативе сервера, или возникли проблемы на транспортном уровне, свойство State этого не отразит.
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
08.12.2012, 11:04  [ТС]     Проверка на подключение к базе #8
Цитата Сообщение от nio Посмотреть сообщение
Но этот способ не самый лучший: если подключение было закрыто по инициативе сервера, или возникли проблемы на транспортном уровне, свойство State этого не отразит.
Какой способ тогда использовать?
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.12.2012, 11:06     Проверка на подключение к базе #9
SuLLeN, я ни какой не использую. Операцию обращения к БД ставлю в try-catch и этого достаточно
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
08.12.2012, 11:13  [ТС]     Проверка на подключение к базе #10
Попробовал вот так:
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
settings settings = new settings();
                string Connectio = @"server=" + settings.textBox1.Text + ";" + "user=" + settings.textBox2.Text +
                ";" + "database=" + settings.textBox4.Text + ";" + "password=" + settings.textBox3.Text + ";charset=utf8;";
                MySqlConnection MyConnection = new MySqlConnection(Connectio);
                MyConnection.Open();
                if (MyConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("Подключение отсутствует!", "Ошибка");
                }
                else if (MyConnection.State == ConnectionState.Open)
                {
                    //Запись настроик в файл из TextBox.ов
                    StreamWriter sw = new StreamWriter("settings");
                    sw.WriteLine(textBox1.Text);
                    sw.WriteLine(textBox2.Text);
                    sw.WriteLine(textBox3.Text);
                    sw.WriteLine(textBox4.Text);
                    sw.Close();
                    Form1 frm = (Form1)this.Owner;
                    frm.load_buyer();
                    frm.load_discount();
                    frm.load_product();
                    frm.load_seller();
                    Close();
                }
Мускул специально отключил, а программа все равно сработала будто мускул работает.

Добавлено через 46 секунд
Цитата Сообщение от nio Посмотреть сообщение
Операцию обращения к БД ставлю в try-catch и этого достаточно
Покажи, пожалуйста, как ты это делаешь?
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.12.2012, 11:32     Проверка на подключение к базе #11
SuLLeN, а ты вообще какую-то фигню делаешь.
перевожу на русский:
если соединение с БД закрыто - выдать сообщение
иначе
если соединение открыто - записать данные в файл (и еще куча каких-то малопонятных телодвижений)
а я тебе про это рассказывал http://msdn.microsoft.com/ru-ru/libr...utescalar.aspx
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
08.12.2012, 11:35  [ТС]     Проверка на подключение к базе #12
Вот еще что откопал:
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
settings settings = new settings();
            string Connectio = @"server=" + settings.textBox1.Text + ";" + "user=" + settings.textBox2.Text +
            ";" + "database=" + settings.textBox4.Text + ";" + "password=" + settings.textBox3.Text + ";charset=utf8;";
            MySqlConnection sqlConn = new MySqlConnection(Connectio);
            MySqlCommand command = sqlConn.CreateCommand();
            MySqlDataReader Reader;
            command.CommandText = "SELECT 1";
            try
            {
                sqlConn.Open();
                Reader = command.ExecuteReader();
            }
            catch
            {
                MessageBox.Show("Нет связи с БД!", "Ошибка подключения");
            }
            if (checkBox1.Checked == true)
            {
                //Запись настроик в файл из TextBox.ов
                StreamWriter sw = new StreamWriter("settings");
                sw.WriteLine(textBox1.Text);
                sw.WriteLine(textBox2.Text);
                sw.WriteLine(textBox3.Text);
                sw.WriteLine(textBox4.Text);
                sw.Close();
                Form1 frm = (Form1)this.Owner;
                frm.load_buyer();
                frm.load_discount();
                frm.load_product();
                frm.load_seller();
                sqlConn.Close();
                Close();
            }
            else if (checkBox1.Checked == false)
            {
                Form1 frm = (Form1)this.Owner;
                frm.load_buyer();
                frm.load_discount();
                frm.load_product();
                frm.load_seller();
                sqlConn.Close();
                Close();
            }
После catсh все остальное ведь не выполняется?
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.12.2012, 11:38     Проверка на подключение к базе #13
SuLLeN, я тебе ещё раз говорю: ты делаешь фигню какую-то нелогичную. Зачем тебе контролировать подключение к БД, если ты пишешь в файл?
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
08.12.2012, 11:38  [ТС]     Проверка на подключение к базе #14
Цитата Сообщение от nio Посмотреть сообщение
а ты вообще какую-то фигню делаешь.
Это просто кусок от кода был
Ты его целиком не видел, поэтому не понял.
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.12.2012, 11:40     Проверка на подключение к базе #15
SuLLeN, все равно тебе эта проверка не нужна. посмотри ссылку, которую я дал
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
08.12.2012, 11:42  [ТС]     Проверка на подключение к базе #16
Ок.
Контролировать нужно потому, что это форма подключения.
В ней 2 проверки:
1) Есть ли подключение
2) Нажат ли чекбокс

Если подключения нет то выдаст сообщение о ошибке соединения и на этом все, программа закрывается или ждет пока бд включат (еще не решил).
Если подключение есть, программа проверяет нажат ли чек бокс.
Если нажат то сохраняет данные введенные пользователем и заходит, а если нет то просто заходит.

Так яснее?
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.12.2012, 14:19     Проверка на подключение к базе #17
SuLLeN, не знаю логику твоего приложения, но я бы делал так: если "Нажат чекбокс", то попытка сохранить данные, если не удалось (по любой причине, в том числе отсутствие соединения), то пользователь ждет (не знаю чего)
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
09.12.2012, 17:00  [ТС]     Проверка на подключение к базе #18
Цитата Сообщение от nio Посмотреть сообщение
если не удалось (по любой причине, в том числе отсутствие соединения)
Почему так? Сведения о подключении сохраняются же в файл а не в базу.
nio
5897 / 3300 / 198
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
09.12.2012, 22:46     Проверка на подключение к базе #19
Цитата Сообщение от SuLLeN Посмотреть сообщение
Почему так? Сведения о подключении сохраняются же в файл а не в базу.
Причин не выполнения запроса множество:
1) нет соединения по причине неверной строки подключения
2) нет соединения по причине отсутствия сети
3) отключен сервер
4) неправильно составлен запрос
5) нарушена целостность данных
... и ещё масса причин. Поэтому контролировать возникновение исключения обязательно нужно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 11:35     Проверка на подключение к базе
Еще ссылки по теме:

Удалённое подключение к базе C#
C# Подключение к базе данных MS Access
C# Oracle подключение к базе с логином на русском
Подключение к базе из .config C#
C# Подключение к базе MSSQL

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

Или воспользуйтесь поиском по форуму:
skynick99
116 / 116 / 10
Регистрация: 06.12.2012
Сообщений: 254
10.12.2012, 11:35     Проверка на подключение к базе #20
Цитата Сообщение от SuLLeN Посмотреть сообщение
Доброго времени суток!
Как проверить, подключен к базе или нет?
что ты имеешь виду.
подключение выполняется только на определенное время, чтобы выполнить запрос, чем меньше время тем лучше.
это логика ADO.NET
далее если ты пишешь, try,catch не забывай про finally, а то твой try catch до одного места.
C#
1
2
3
4
5
6
7
8
9
10
11
try
{
       connection.Open();
}
catch
{
}
finally
{
       connection.Close();
}
или используй
C#
1
2
3
4
using (SqlConnection connection=new SqlConnection(connection_string))
{
       //connection.Close(); использовать тогда не надо. 
}
Добавлено через 12 часов 33 минуты
Цитата Сообщение от SuLLeN Посмотреть сообщение
Это просто кусок от кода был
Ты его целиком не видел, поэтому не понял.
да уж, ООП тут и не пахнет.
Yandex
Объявления
10.12.2012, 11:35     Проверка на подключение к базе
Ответ Создать тему
Опции темы

Текущее время: 06:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru