Работа с СУБД MySQL в C#

Работа с базой данных MySQL в C#

Рассмотрим простенькую задачку. У нас есть сайт, управление, которым осуществляется с помощью cms WordPress, а все данные хранятся в базе данных СУБД MySQL. Нужно создать клиентское приложение, которое будет подключаться к базе данных, получать все комментарии за сегодняшний день и выводить их в DataGridView.

Подготовка

Создадим Windows Forms приложение и поместим на форму два элемента управления: кнопку с надписью получить комментарии и datagridview, который будет визуально отображать полученные данные.

окно программы

Для работы с базой данных нам потребуется поставщик данных (data provider), он обеспечивает подключение к БД, позволяет выполнять команды и получать результаты. По сути это обычный файл (.dll), внутри которого содержаться типы, которые настроены на взаимодействие с какой-то одной конкретной СУБД: MySQL, Oracle, Microsoft SQL Server и так далее.

поставщик данных

В Microsoft ADO.NET основное количество поставщиков данных содержится в сборке Sytem.Data.dll, но в этой сборке нет поставщика данных для работы с MySQL. Поэтому его придется скачать и установить самостоятельно. Как это сделать, можно прочитать здесь.

Так же для подключения к базе данных потребуется узнать ip адрес сервера, эту информацию вы можете уточнить у вашего хостера.

И последнее, что нужно узнать, это имя таблицы, в которой хранятся все комментарии. Это можно сделать разными способами, например, зайти на официальный сайт WordPress и найти страницу «Database Description», на которой приведено полное описание архитектуры базы данных.

структура бд WordPress

Либо, к примеру, воспользоваться утилитой phpMyAdmin и вручную осуществить поиск нужной таблицы, остановимся на нём.

phpMyAdmin

И так открываем страницу phpMyAdmin, слева видим список баз данных.

список баз данных

Выбираем в списке базу данных нашего сайта, например mytest и нажимаем на её заголовок. На открывшейся странице мы видим список всех доступных таблиц, среди которых есть таблица wp_comments (wp — это префикс таблиц, у вас он может быть другим), само же имя будет таким же.

список таблиц

Посмотрим, что содержится в данной таблице. Для этого нажимаем на значок с именем Browse.

значок

В открывшемся окне мы видим состав таблицы, а так же какие-то ранее занесенные в неё данные, которые нам как раз и нужно будет получить.

таблица с комментариями

Все поля нас не интересуют, поэтому возьмем только парочку, к примеру, получим значения: автор (comment_author), дата (comment_date) и сам текст комментария (comment_content).

Переходим к написанию кода.

Исходный код

Для начала создадим метод GetComments, который будет возвращать объект DataTable. Так как по умолчанию созданный метод имеет модификатор доступа private, то его можно не указывать явно.

DataTable GetComments()
{
}

Затем настроим подключение к базе данных

1. Создадим и заполним объект MySqlConnectionStringBuilder, который будет хранить следующие значения: имя сервера, где лежит база данных, имя пользователя и пароль для подключения к БД, а так же имя базы данных.

Либо Вы можете создать конфигурационный файл и все данные подключения вынести в него, подробный пример будет приведён в следующей статье.

MySqlConnectionStringBuilder mysqlCSB;
mysqlCSB = new MySqlConnectionStringBuilder();
mysqlCSB.Server = "ip адрес сервера";
mysqlCSB.Database = "имя БД";
mysqlCSB.UserID = "имя пользователя";
mysqlCSB.Password = "пароль";

2. Создадим строку запроса, в ней мы выбираем все комментарии за сегодняшний день.

string queryString = @"SELECT comment_author,
comment_date,
comment_content 
FROM   wp_comments 
WHERE  comment_date >= CURDATE()";

3. Создадим объект DataTable, который будет возвращать наш метод и принимать datagridView.

DataTable dt = new DataTable();

4. Создадим объект подключения, используя класс MySqlConnection.

using(MySqlConnection con = new MySqlConnection())
{
}

4.1 Настроим созданный объект, передав в свойство ConnectionString наш созданный ранее объект типа MySqlConnectionStringBuilder.

con.ConnectionString = mysqlCSB.ConnectionString;

5. Открываем соединение с базой данных

con.Open();

6. Создаем объект команду, в конструктор передаем строку запроса и объект подключения

MySqlCommand com = new MySqlCommand(queryString, con);

7. Выполним метод ExecuteReader, который позволит получить объект чтения данных MySqlDataReader

using(MySqlDataReader dr = com.ExecuteReader())
{
//есть записи?
if (dr.HasRows)
{
//заполняем объект DataTable
dt.Load(dr);
}
}

Полный листинг

using MySql.Data.MySqlClient; //Добавить
private DataTable GetComments()
{
DataTable dt = new DataTable();
MySqlConnectionStringBuilder mysqlCSB;
mysqlCSB = new MySqlConnectionStringBuilder();
mysqlCSB.Server = "127.0.0.1";
mysqlCSB.Database = "mytest";
mysqlCSB.UserID = "root";
mysqlCSB.Password = "123";
string queryString = @"SELECT comment_author,
comment_date,
comment_content
FROM   wp_comments
WHERE  comment_date >= CURDATE()";
using (MySqlConnection con = new MySqlConnection())
{
con.ConnectionString = mysqlCSB.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);
}
}
return dt;
}

Осталось поместить полученные данные в datagridView.

private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = GetComments();
}

На этом всё, осталось протестировать наше приложение. Нажимаем на кнопку получить комментарии, и видим результат.

результат

Читайте также:

97 комментариев

  1. Damir Nurmadiev says:

    Все супер ! Спасибо вам !

  2. Сергей says:

    Спасибо огромное!
    Как сделать чтобы он вывел данные из 1 столбца 1 строки и сам их обновлял ( допустим каждые 5 сек.) ?

  3. Сергей says:

    Я сделал все правильно, но почему то мне нечего не выводится (

  4. Изменить SQL запрос, либо получить все данные и затем уже вытащить нужные по отдельности, например: как получить данные из DataTable

    Таймер разместить на форме и подписаться на событие click кнопки «Получить комментарии», либо просто сам метод GetComments поместить в обработчик события таймера

  5. Виталий says:

    Здраствуйте возникла проблема, собственно если в mysql запись имеет очень длинное значение (больше 160 символов), то datatable отказывается ее выводить, выдает «Не удалось включить ограничения. По меньшей мере одна строка содержит значение, нарушающее ограничения по отсутствию пустых значений, уникальности или внешним ключам», прошу помощи не знаю что делать теперь даже…

  6. Привет. «datatable отказывается ее выводить» — не понял вот эту часть, потому что Datatable только хранит данные, а куда выводите? Поподробней если можно.

  7. Янис says:

    Здравствуйте. Делаю так как описанно в статье. Но некак не могу подключится к mysql. Выводит «unable to connect any of the specified mysql host» Скажите пожалуйста что я делаю не так?

    Вот весь код:

    [код из статьи]

  8. Привет. Может быть много причин, например:

    • Включен firewall (на клиенте либо на сервере), поэтому не возможно подключиться к серверу с БД.
    • Если локальный компьютер и на нём установлен denwer, то нужно проверить, запущена ли служба (Start Denwer)
    • ip адрес сервера, к которому подключаетесь, указан верный или нет?

    Это проблема связана именно с подключением.

  9. Янис says:

    Спасибо Admin за ответ. Я заметил что при например неверном подключении или неверной имени базы данных вылетает та же самоя ошибка. Только вот когда все делаю правильно как в коде высше тогда ошибка вылетает через 10 секунд… Подозреваю что скорее всего это всетаки блокируется брендмауером, антивирусом либо рутером в настройках..
    Могут быть еще и другие варианты ?

  10. «Только вот когда все делаю правильно как в коде высше» — если можно, то поподробней.

    • Если стоит антивирус, который имеет файрвол, то можно его временно отключить и попробовать соединиться.
    • Если есть второй компьютер под рукой, то можно попробовать с него выполнить подключение к серверу с БД и посмотреть какой будет результат для сравнения.
    • Опять же посмотреть лог файл (mysql.log).
  11. Янис says:

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

    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.

    ************** Exception Text **************
    System.IO.FileNotFoundException: Could not load file or assembly ‘MySql.Data,
    Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d’ or one
    of its dependencies.

    Некак не могу разобратся. Помогите пожалуйста решить проблему
    могу выслать и весь проэкт.

  12. На втором компьютере нужно установить MySQL Connector

    "System.IO.FileNotFoundException: Could not load file or assembly ‘MySql.Data"

    FileNotFoundException — файл не найден! Короче говоря он не может найти сборку MySql.Data.

  13. username says:

    День добрый, воспользовался вашим способом, он мне помог, но не подскажите мне как можно сделать экспорт из datagridview в excel? Буду очень благодарен:)

  14. Янис says:

    Точно. Проблема была в коннекторе. Установил на втором компе, сейчас опять то же самое..: «unable to connect any of the specified mysql host» (( А у вас админ компилируется мой проэкт ?

  15. Янис says:

    Компилируется и работает (соединяется с бд) без проблем?

  16. Если выполнить:

    ping ip адрес mysql сервера

    , что показывает?

    Пример

  17. Янис says:

    Страница с которой хочу вывести коментарии wordpress распаложенна на бесплатном хостинге [внешняя ссылка заблокирована!]
    Доступ к базе данных [внешняя ссылка заблокирована!]/pma/

    Сам ее IP адрес 144.*.*.* . пинг проходит успешно. Пробовал по разному ставить путь. Тоесть и IP адрес и адреса [внешняя ссылка заблокирована!]/pma/, [внешняя ссылка заблокирована!]

    То же сообщение.. Только с IP адресом задержка на вывод сообщения дольше (10 скеунд)…

  18. Нужно открыть файл wp-config.php, который лежит в корневой директории сайта. А затем найти define(‘DB_HOST’, значение)
    Значение — это ip адрес mysql сервера к нему и нужно подключаться. Он совпадает c тем, к которому подключаетесь?

    Либо в панели управления на хостинге можно посмотреть ip адрес БД, если значение == localhost.

  19. Янис says:

    Так там прописанно localhost…

  20. Янис says:

    Вот что написанно в настройках в менеджере сайта.
    «PhpMyAdmin is located at [внешняя ссылка заблокирована!].
    You have access in one shot to ALL your databases, already created.»

    Но эта ссылка результата не дает.. все тоже самое..

  21. phpmyadmin — это оболочка для работы с БД к ней не нужно подключаться, нужно спросить на хостинге в тех. поддержке ip адрес сервера БД.

  22. Янис says:

    А IP адрес хостинга и mysql не один и тотже ?

  23. Не всегда совпадает.

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

    Так же, если я не ошибаюсь, нельзя использовать root запись при подключение.

  24. Янис says:

    Ок спасибо. Постараюсь связатся с администрациией.

  25. Янис says:

    Здравствуйте, все равно не получилось через интернет принимать данные. Могли бы вы мене помочь если я выслал бы вам весь проэкт с паролем доступа к базе данных? Проверьте на своем компе получится или нет..

  26. «не получилось через интернет принимать данные» — всё та же ошибка? Обращались в тех. поддержку хостинга, если да, то, что Вам ответили?

  27. Янис says:

    Ответили что ip adres базы данный это тот который я исполовал в проекте, тоесть правильный.

  28. Тогда нужно проверить, включен ли удаленный доступ для пользователя от которого выполняется подключение к БД. Потому что, по умолчанию, на сервере, обычно включен только локальный доступ и удаленно подключиться не получиться.

    Также на клиенте нужно убедиться, чтобы пакеты не блокировались во время передачи данных. Проверить настройки файрвола, роутера.

    «Проверьте на своем компе получится или нет» — я не занимаюсь такой работой, для этого есть сайты по фрилансу.

  29. Янис says:

    Здравствуйте я не знаю, может админ хостинга неправильно меня понял.. я вот на этом хостинге [внешняя ссылка заблокирована!] какой там ip adres к mysql ? Не вот этот 144.*.*.*? либо 144.*.*.*/pma ?

  30. Янис says:

    Вот еще PhpMyAdmin is located at [внешняя ссылка заблокирована!]
    You have access in one shot to ALL your databases, already created.

  31. В строке подключения нужно указать: ip адрес либо имя сервера. pma — это сокр. phpmyadmin его указывать не нужно. Тем более, что тех. поддержка уже Вам сказала, какой ip адрес нужно использовать.

    «Вот еще PhpMyAdmin is located … » — это никак не связано с подключением.

  32. Янис says:

    Здравствуйте, а SSH доступ на сервере это не то что мне нужно?

  33. Привет. Полную информацию по подключению к серверу баз данных может дать только тех. поддержка хостера, а сидеть и гадать — это пустая трата времени.

  34. Геннадий says:

    Спасибо . я совсем самоучка новичек . Очень долго искал как подключиться к бд . все версии что предлагают в интернете ,ничего не подходило может я конечно чего -то не понимал .но всегда выходили ошибки . А у вас все доходчево и с первого раза все получилось. Правда поле того как я подключился к базе появилось много вопросов . Но это уже совсем другая история ??

  35. Спасибо. Можете оставлять вопросы в комментариях или на форуме, если что-то не понятно.

  36. Геннадий says:

    Здравствуй
    скажите пожалуйста.
    как мне сделать что я мог выводить инфу из бд.
    таким способом
    например у меня в базе есть таблица в которой есть например имя фамилия текст .
    как мне сделать что б я мог выводить в первом textBox только имя во втором textBox только текст . мне явно не надо писать под каждый textBox весть этот код .есть более удобный способ например как и php я подставляю только переменные
    p.s извиняюсь за грам ошибки , 20 лет не в России дают о себе знать

  37. Привет! Вот пример.

    Только вместо переменных указываешь textBox-ы.

  38. Геннадий says:

    Спасибо !все получилось без проблем

  39. Геннадий says:

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

  40. =) Например, можно подписаться на событие Form.Load, которое есть у любой формы:

    private void Form1_Load(object sender, EventArgs e)
    {
    GetComments(); //получаем данные из БД
    }
  41. Геннадий says:

    спасибо!!

  42. Геннадий says:

    ну наконец-то я вас нашел . переустановил windows а ссылку забыл сохранить ..
    Скажите пожалуйста . я вот тут пишу приложения XNA studio 3,0
    сделал все как вы показываете . да и все получалось у меня а вот в xna ошибка не может подключить
    using MySql.Data.MySqlClient;
    выдает ошибку

  43. Геннадий says:

    хотя извините задавая вам вопрос я сам же на него ответил . я не подключил пространства имен
    using MySql.Data.MySqlClient;
    так как его нет в списке ссылок ..
    после установки
    mysql-connector-net-6.9.4.msi почему-то не появляентся… раньше я это все делал в visual studio2010 а сейчас стоит 2008 может быть в этом причина ? . но в 2010 версии я не могу запустить xna studio / хотя раньше так и было .. вообщем круговая парука

  44. Геннадий says:

    Вообщем спасибо . Я разобрался ?? .

  45. Николай says:

    Супер гуд! ?? Спасибо!

  46. Михаил says:

    Здравствуйте. Подскажите пожалуйста с чем может быть связанна следующая проблема:
    Сделал все так как показано в вашем примере,ввел в запросе свои данные , программа запускается без ошибок, НО при нажатии кнопки ничего не происходит, т.е. не появляются никакие записи с базы. Из-за чего это может быть?
    Заранее спасибо!)
    P.S
    Запрос в таком виде:

    string queryString = @"SELECT Position, Name, Flag
    FROM connectives
    WHERE Position = 2";
  47. 1. Для начала стоит проверить, а есть ли данные в таблице connectives? Может быть она пустая?
    2. Затем само условие поверить (WHERE Position=2) возможно нет соответствий, получаем пустоту.
    3. Далее проверить if (dr.HasRows) если false, то соответственно ничего не получили из БД, а значит опять будет пусто в datagridview, значит опять же разбираемся с БД. И так далее.
    4. Срабатывает ли событие Button.Click? Возможно не подписаны на событие или не работает обработчик события.

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

  48. Михаил says:

    Спасибо, проблема была по 4 пункту. Не срабатывал обработчик действий (баттон) .

  49. Михаил says:

    Подскажите еще,пожалйста. Как сделать так что б в запросе можно было использовать перемнные. Т.е. в запросе

    @"SELECT Position, Name, Flag
    FROM connectives
    WHERE  Position= @k OR Position=@p
    ORDER BY RAND()
    LIMIT 1";

    Мне надо в Position использовать то что хранится в переменных k и p.
    При том варианте как написал я- выскакивает ошибка «fatal error encountered during command execution»

  50. int x = 10;
    int y = 5;
    SELECT Position, Name, Flag
    FROM connectives
    WHERE  Position = @k OR Position = @p
    ORDER BY RAND()
    LIMIT 1;
    MySqlCommand cmd = new MySqlCommand(sql, con);
    cmd.Parameters.AddWithValue("@k", x);
    cmd.Parameters.AddWithValue("@p", y);
    cmd.ExecuteNonQuery();

    Пример: Удаление строки в базе данных Mysql

  51. Геннадий says:

    здравствуйте
    скажите пожалуйста , как можно посчитать сколько есть записей в таблице
    ну или еще лучше . как вывести все записи из таблицы
    спасибо

  52. сколько записей в таблице:

    SELECT COUNT(*) FROM имя_таблицы;

    все записи из таблицы:

    SELECT * FROM имя_таблицы;

    (изучайте SQL)

  53. Геннадий says:

    спасибо . вы не много меня не правильна поняли .ну или я не правильно объяснил .
    на счет сколько записей в таблице я так и не понял как вывести на экран .
    а на счет вывести все записи . я имел ввиду . вывести все записи на экран ну например в textBox а то у меня получается что выводиться только первая запись . ну или та которую укажу в WHERE . как я понимаю нужно сделать цикл for ну или while но для этого нужно знать сколько записей в таблице .

  54. Вот пример, как можно получить количество всех записей в таблице: Mysql метод ExecuteScalar

    Если же брать пример из данной статьи, то здесь if (dr.HasRows) проверяет наличие строк, если их нет, то false и можно какую-то логику описать, а если строки есть, то получить их кол-во можно так:

    int value = dt.Rows.Count;

    Здесь кол-во записей в DataTable (dt) будет равно количеству записей в таблице.

  55. Геннадий says:

    Здравствуйте
    скажите пожалуйста . Кто нибудь может объяснить как вывести все записи из базы на экран . ну в текстБоксе например или в лабелах .. в php это все реализуется в цикле while без всяких заморочек . как мне это сделать в C# я уже все что мог перепробовал

  56. «Все записи из базы» — это данные из всех таблиц? Вы можете поподробней задачу описать? В языке c# тоже можно использовать цикл while, например: Mysql метод ExecuteReader

  57. Геннадий says:

    Спасибо .тема закрыта . листБокс подошел ?? . правда это наверное не решит мою проблему . ну все-же

  58. Константин says:

    Огромное спасибо! Все получилось сразу, даже с реальным удаленным сервером БД!

  59. Алексей says:

    Здравствуйте, подскажите пожалуйста. Делаю все как описано в статье, данные из таблицы выводятся, но возникла проблема с кодировкой. Текст на русском выводится крокозябрами. что с этим можно сделать?

  60. Можно попробовать в строке подключения добавить:

    "Server=localhost;Database=mydb;Uid=user;Pwd=123;Charset=utf8;"

    для MySqlConnectionStringBuilder:

    mysqlCSB.UserID = "имя пользователя";
    mysqlCSB.Password = "пароль";
    ...
    //добавить
    mysqlCSB.CharacterSet = "utf8";
  61. Алексей says:

    Это все уже перепробовал, не помогает. Есть еще какие то варианты? Изначально какая у Вас кодировка была в базе и в таблице?

  62. Алексей says:

    Все, разобрался. Если указывать при создании базы и таблицы кодировку ср866, то русский текст нормально переносится на форму. Спасибо!

  63. По умолчанию рекомендуется utf8, так как она поддерживает большинство языков, но лучше установить utf8_general_ci.

  64. Здравствуйте. Тоже проблема с кодировкой. Данные в базе в кодировке «latin1», при чтении из базы кириллица нечитаема, подскажите пожалуйста, как можно производить конвертацию кодировки символов при запросе.

  65. «Данные в базе в кодировке «latin1?, при чтении из базы кириллица нечитаема». Всё правильно, потому что latin1 предназначена только для западноевропейских языков и в ней нет кириллицы. Конвертирование — это неправильный путь. Нужно изменить кодировку для таблицы или для всей бд, например в том же phpmyadmin на utf8, utf8_general_ci или utf8_unicode_ci.

  66. А таблица, в которой содержатся данные, точно в кодировке latin1, потому что не понятно, как туда кириллица вставилась? И ещё если открыть таблицу с данными, то там они отображаются нормально или тоже кракозябры?

  67. «в свойствах сервера везде кодировка стоит «latin1?, COLLATE «latin1_general_ci». Есть подозрения, что в таблицах с кодировкой latin1, данные в кодировке cp1251. »

    Конвертирование кодировки бд и таблиц будет лучшим решением в данной ситуации, тем более что выполняется оно довольно просто.

  68. Николай says:

    Доброго времени, Пишу курсовую работу на c# + MySQL.
    Ваш сайт помог решить проблему с подключением к БД, как и локально, так и удаленно, за что особое спасибо. Но, в процессе работы, возникло пару вопросов: как отобразить в таблице не id внешнего ключа , а само значение ячейки из другой таблицы. Получилось только «Для нужного в столбца в свойствах вместо TextBoxColumn ставишь ComboboxCombobox, в DataSource выбираешь источник(BindinSource например), в DisplayMember поле с названиями, в ValueMember — поле с id.», но тут только через непосредственное подключение базы в datagridview. Заранее спасибо.

  69. Николай says:

    Посидел над SQL-запросами. Нашел вот такое решение.

    string queryString = @"SELECT p_id, p_fio, p_tel, city FROM phone, gorod where p_gor=g_id";
  70. Такие вопросы лучше на форуме задавать.

    Вот пример: Создание связи между таблицами в DataSet

  71. Илья says:

    Здравствуйте.
    В статье говорится, что можно создать отдельный файл конфигурации для подключения к БД, и этот пример будет рассмотрен в следующей статье, но статью не нашел, можете дать ссылку, пожалуйста. И вот еще, значит ли этто, что можно будет создать простую форму в которой можно будет задать ip, login и пароль для подключения.
    Заранее спасибо, с нетерпением жду ответа.

  72. создание файла конфигурации для подключения к БД

    «значит ли это, что можно будет создать простую форму» — да, можно.

  73. Ольга says:

    Здравствуйте!
    Можно уточнить, а в чем преимущество data provider по сравнению с пространством имен System.Data.SqlClient? Это просто разные способы подключиться к базе данных?
    Если моя база просто хранится в SQL server 2008, и мне нужно некоторые данные из неё с помощью C# загрузить в Word-документ, то как лучше подключиться?
    Извините, если вопрос очень глупый) я только начала работать с базами в C#.

  74. 1. А System.Data.SqlClient — это не data provider? data provider — это библиотека для работы с конкретной СУБД, например: System.Data.SqlClient — MSSQL, MySql.Data.MySqlClient — MySQL.

    2. Подключение к MSSQL выполняется таким же образом, как и при работе с СУБД MySQL: создаётся объект Connection, выполняется метод Open.

  75. Антон says:

    Добрый день. Подскажите пожалуйста, как записать введенные значения в dataGridView1 в БД?

  76. Антон says:

    Спасибо. Еще вопрос. Как мне изменить нужные данные?

  77. Илья says:

    И снова здравствуйте!
    Моя проблема такова: я написал приложение для работы с БД на сервере, скомпилировал его в exe, и все нормально работало, на машине на которой я вел проект. Данные вносились и выводились, как положено, но при запуске на другом компьютере в базу вместо записи на русском языке вносится это «???????????». Что странно, так как при установке MySQL сервера в настройках установлена кодировка utf-8, и все остальные настройки совпадают.
    Подскажите пожалуйста, в чем может быть проблема.

  78. Привет.
    Здесь может быть много причин…
    Например, откуда берутся данные, которые передаются в БД? (например: из файла, текстового поля или что-то другое)
    Если, например это текстовый файл, то нужно проверить ещё на клиенте, нет ли проблем с кодировкой после чтения файла.
    Если в строке подключения прописать кодировку? (mysqlCSB.CharacterSet = «utf8″; или database=test;Charset=utf8;»)
    Опять же БД для обоих клиентов одинаковая?
    Версию mysql connector обновить.

  79. Владимир says:

    У меня нет вкладки NET как у вас на видео и тем более нет MySqlData
    Что делать, где искать?

  80. Как установить Mysql Connector
    Сборку можно добавить через вкладку Browse, с помощью проводника просто указав нужную сборку.

  81. Андрюха комп says:

    Спасибо ОГРОМНОЕ за данный код и уроки!!!!!!!!!!!!!!
    Только одно не понравилось-все видео без звука.
    Пожалуйста в следующих видео сделать озвучивание!

  82. Иван says:

    Спасибо за статьи!
    Возник насущный вопрос:
    Как периодически, к примеру по таймеру (или может есть более интересные варианты?) обновлять выводимое в DataTable и соответственно в dataGridView1 ?
    Заранее Спасибо!

  83. Control Timer самое простое решение.

    Пример:

    timer1.Interval = какой-то интервал;
    timer1.Enable = true;

    подписываемся на событие Tick

    private void timer1_Tick(object sender, EventArgs e)
    {
    //выполняется обновление
    dgv.DataSet = null;
    dgv.DataSet = UpdateData();
    }
    //обновление данных
    private DataTable UpdateData()
    {
    DataTable dt = new DataTable();
    //операции связанные с получением новых данных
    return dt;
    }
  84. Жаль, но код не заработал, хотя SQL запрос я проверил. Нажатие на кнопку ничего не дает, глухо как в танке…

  85. Исключение возникает при этом? Если да, то какой содержит текст?
    Нажатие на кнопку отрабатывается? То есть, например если поставить точку остановы внутри событие Click, то функция запускается на выполнение?

    ещё советы

  86. Могли бы показать код, как добавить обработчик на новую кнопку (button2, скажем), который, ну пускай, что-либо вносит в таблицу (INSERT INTO).
    Не знаком с ооп, на костылях и собственных ошибках пытаюсь разобраться как сделать подобное). Или может подскажет что конкретное прочесть? Буду благодарен

  87. Спасибо огромное! Ваш труд бесценен!)

    А каким образом можно привязать уже созданные вручную столбцы (в dataGridView) к извлекаемым из mysql ?

    В описании класса SqlDataReader есть свойство Item (Возвращает значение указанного столбца в собственном формате), только вот VS 2012 ругается что нет такого…
    Или не в ту степь залез?

  88. А каким образом можно привязать уже созданные вручную столбцы (в dataGridView) к извлекаемым из mysql ?

    Зависит от выбранной модели работы: Connected, Disconnected, Entity Framework?

    В описании класса SqlDataReader есть свойство Item (Возвращает значение указанного столбца в собственном формате), только вот VS 2012 ругается что нет такого…

    Если СУБД MySQL, то нужно использовать MySqlDataReader

  89. Михаил says:

    Все Супер, Спасибо вам

  90. Пишет данный ключ отсутствует в словаре

    [код из статьи]

  91. В каком месте кода возникает Exception?

  92. Проблему решил, была неправильная кодировка БД.

  93. Полезно. Спасибо!

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*