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

Объясните, как работает код подключения к базе данных MySQL

19.02.2015, 12:42. Показов 1685. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня имеется код, который я нашел на просторах интернета, в видео уроке, который к сожалению был без звука, в нем давался такой вот код:
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
DataTable GetComments(string QueryString)
        {
            string queryString = QueryString;
            DataTable dt = new DataTable();
            MySqlConnectionStringBuilder mySqlSB = new MySqlConnectionStringBuilder();
 
            mySqlSB.Server = "127.0.0.1";
            mySqlSB.Database = "arm_sis_admin";
            mySqlSB.UserID = "root";
            mySqlSB.Password = "";
 
            using (MySqlConnection con = new MySqlConnection())
            {
                con.ConnectionString = mySqlSB.ConnectionString;
 
                MySqlCommand com = new MySqlCommand(queryString, con);
 
                try
                {
                    con.Open();
                    using (MySqlDataReader dr = com.ExecuteReader())
                    {
                        if (dr.HasRows)
                        {
                            dt.Load(dr);
                        }
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                con.Close();
            }
            return dt;
        }
Кто может внятно объяснить как он работает? И как понимаю любой коннект, если его открыли, то должны и закрыть, в правильном ли я месте закрываю соединение? И можно ли эту процедуру как-то упростить, мне нужно потом в будущем делать проверку при первом запуске программы, а именно, какой сервер, база данных и т.д., которые я собираюсь считывать из текстового файла в папке программы и если допустим данных нету или они неверны, то выводить форму где предлагают эти самые данные ввести.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2015, 12:42
Ответы с готовыми решениями:

Ошибка подключения к базе данных MySQL
Здравствуйте. Пытаюсь подключиться к своей базе данных на SQL, но почему-то выдаёт ошибку на операции connection.open(); using System;...

Как сделать такую еще форму подключения к базе данных?
Как сделать такую еще форму подключения к базе данных?

Ошибка подключения к базе MySQL (MySqlClient)
Доброго времени суток. Проблема такая: Не могу подключиться к базе на Mysql сервере. Выбивает ошибку. Вот код: using System; using...

9
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
19.02.2015, 13:03
Цитата Сообщение от Darkvoid Посмотреть сообщение
если его открыли, то должны и закрыть, в правильном ли я месте закрываю соединение?
в вашем коде его закрывать не нужно вроде, т.к используется using.
Работа с Ado для любой субд одинакова. Открывается соединение, выполняется команда, выгружаются данные в dataset/datatable.
Если нужно проверять существование бд, то можно в try-catch завернуть метод открытия соединения, и ловить ошибку
0
8 / 8 / 10
Регистрация: 16.10.2012
Сообщений: 523
19.02.2015, 13:14  [ТС]
Цитата Сообщение от Монфрид Посмотреть сообщение
в вашем коде его закрывать не нужно вроде, т.к используется using.
А почему не нужно закрывать? Чуть подробнее тут, пожалуйста
MySqlConnectionStringBuilder - как понимаю принимает массив строк, описанных в коде выше, так? Можно ли все это засунуть в одну строку?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try
                {
                    con.Open();
                    using (MySqlDataReader dr = com.ExecuteReader())
                    {
                        if (dr.HasRows)
                        {
                            dt.Load(dr);
                        }
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
Что означает if(dr.HasRows) и блок после?
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
19.02.2015, 13:31
Цитата Сообщение от Darkvoid Посмотреть сообщение
А почему не нужно закрывать?
потому что
Цитата Сообщение от Монфрид Посмотреть сообщение
используется using.
Цитата Сообщение от Darkvoid Посмотреть сообщение
MySqlConnectionStringBuilder - как понимаю принимает массив строк,
не принимает он никакого массива. Ему нужны данные о подключении к бд.
Цитата Сообщение от Darkvoid Посмотреть сообщение
Можно ли все это засунуть в одну строку?
не знаю, возможно, у него есть перегруженный конструтор, который всё это принимает.
Цитата Сообщение от Darkvoid Посмотреть сообщение
Что означает if(dr.HasRows)
если есть строки, это означает (элементарный английский). Загружаются данные после.

Всё это разжёвано в миллионах статей по интернету, тысячи книг про это написали
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.02.2015, 13:34
Цитата Сообщение от Darkvoid Посмотреть сообщение
MySqlConnectionStringBuilder
Говоря простым языком, это построитель строки соединения. То есть, объектно-ориентированное ее представление. Если в обычном виде строка соединения - это литерал, то при использовании данного типа каждый элемент строки отображается на свойства данного класса.
Цитата Сообщение от Darkvoid Посмотреть сообщение
Что означает if(dr.HasRows) и блок после?
Проверка, есть ли доступные для чтения строки объекту DataReader и если есть - выгрузка данных в таблицу.
0
8 / 8 / 10
Регистрация: 16.10.2012
Сообщений: 523
19.02.2015, 13:45  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Проверка, есть ли доступные для чтения строки объекту DataReader и если есть - выгрузка данных в таблицу.
И получается, если таких данных нету, он просто не загрузит таблицу, верно? И если опустить эту проверку, таблицу будет грузит в любом случае, даже если она пуста, так?
Цитата Сообщение от Монфрид Посмотреть сообщение
потому что
Это не ответ, это больше смахивает на женское "ОЙ ВСЕ"
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.02.2015, 14:14
Цитата Сообщение от Darkvoid Посмотреть сообщение
И получается, если таких данных нету, он просто не загрузит таблицу, верно? И если опустить эту проверку, таблицу будет грузит в любом случае, даже если она пуста, так?
Да, именно так.
Закрывать соединения явно тут не требуется, потому что в данном случае использование конструкции using() разворачивается в типа такого:
C#
1
2
3
4
5
6
try{
   MyConnection.Open();
}
finally{
    MyConnection.Close();
}
То есть, по выходу из конструкции ресурс будет гарантированно освобожден.
1
8 / 8 / 10
Регистрация: 16.10.2012
Сообщений: 523
19.02.2015, 14:55  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
То есть, по выходу из конструкции ресурс будет гарантированно освобожден.
Спасибо за информацию, хотелось бы узнать, как будет выглядеть код, без using
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
try
                {
                    try
                    {
                        con.Open();
                        MySqlDataReader dr = com.ExecuteReader();
                        if (dr.HasRows)
                        {
                            dt.Load(dr);
                        }
                        else
                        {
                            MessageBox.Show("Таблица пуста, добавьте хотябы 1 запись", "Пустая таблица!");
                        }
                    }
                    finally
                    {
                        con.Close();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
попробовал сделать, что-то явно не то, пишет что "dr отсутствует в текущем контексте"
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.02.2015, 15:34
Цитата Сообщение от Darkvoid Посмотреть сообщение
пишет что "dr отсутствует в текущем контексте"
В какой строке?

Добавлено через 8 минут
Darkvoid, вот скажу откровенно, у меня создалось такое впечатление, что вы пишете код "на ощупь", то есть копипастите куски, не понимая как они работают. Вам бы для начала стоило почитать хорошую литературу, тогда и работа по написанию пойдет намного быстрее, все-таки будете понимать, что пишете и зачем используется та или иная конструкция.
P.S. Ничего личного, это так, просто совет. Если вам нравится делать так, как делаете до сих пор - это ваше право.
И да, бросьте все эти видеоуроки. Возьмите хорошую книгу, Троелсена к примеру. Там все это есть.
0
8 / 8 / 10
Регистрация: 16.10.2012
Сообщений: 523
19.02.2015, 16:12  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
Darkvoid, вот скажу откровенно, у меня создалось такое впечатление, что вы пишете код "на ощупь", то есть копипастите куски, не понимая как они работают. Вам бы для начала стоило почитать хорошую литературу, тогда и работа по написанию пойдет намного быстрее, все-таки будете понимать, что пишете и зачем используется та или иная конструкция.
P.S. Ничего личного, это так, просто совет. Если вам нравится делать так, как делаете до сих пор - это ваше право.
И да, бросьте все эти видеоуроки. Возьмите хорошую книгу, Троелсена к примеру. Там все это есть.
Зачастую так и происходит, потому что нету под рукой книги, ищу нужную мне информацию в интернете, вот и сейчас пытаюсь настроить naviagator, настроил - соединил с grid, только выделение строки при нажатии вперед-назад не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2015, 16:12
Помогаю со студенческими работами здесь

Как будет выглядеть строка подключения к базе данных, которая лежит на хостинге
Здравствуйте, форумчане! Пробую подключится к базе данных, которая расположена на сервере www.hostinger. Моя строка подключения: ...

MySQL: как подключатся к базе и куда писать код запроса
Кароч в 2 словах: У меня имеются 3 формы... Form1.cs - Главная Form2.cs - Регистрация Form3.cs - Сам клиент Вот в первой у...

Как подключиться к базе данных MySQL на хостинге
Как подключиться к базе данных? База данных MySQL на хостинге?

Не работает код подключения к базе и выборки данных из таблицы
сделал файл поключения к базе и выборки данных из таблице но он не работает в чем ошибка?вот код: <?php $host =...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru