Работа с MySQL в C#
Язык программирования C# Надеюсь данная публикация не даст читателям повторить мои ошибки и поможет сделать изначально правильный выбор. Первое с чего бы хотелось начать это с настоятельной рекомендации: «Программируя под .NET всегда пользуйтесь MySQL .NET — Коннектором!». Можно конечно и через ADO подключаться к базе но это чревато тем что в будущем вам просто будет необходимо вносить изменения при переходе на Windows Vista и выше.
Маленькое отступление: MySQL очень удобно использовать при программировании для мобильных устройств на базе Windows. Стандартные библиотеки работают и на мобильном устройстве под .NET CF точно так-же как и на сервере или рабочей станции. (Имеются ввиду те случаи, когда необходимо обращение с мобильного компьютера к базе данных на сервере. На самом мобильном устройстве сервер MySQL установить нельзя.) И в дополнение. Крайне не советую использовать на мобильном устройстве SQL.CE для больших баз данных (свыше 50000 записей в таблице) при росте базы быстродействие сильно падает. На мой взгляд гораздо лучше продумать свою систему хранения данных. Но об этом в отдельной публикации.
Для работы с MySQL вам понадобится «MySQL Connector / NET».
Скачать его можно здесь http://dev.mysql.com/downloads/connector/net/5.2.html
Чтобы иметь возможность работать с базой, скачиваем и устанавливаем утилиту.
Далее открываем наш проект и подключаем MySQL Connector:
Project->Add references->.NET->MySQL.Data
После чего в Solution Explorer в ветка Reference должна появиться MySQL.Data.
Обязательно прописываем в проекте:
using MySql.Data.MySqlClient;
Создание подключения к базе данных:
string CommandText = "Наш SQL скрипт";
string Connect="Database=БАЗА;Data Source=ХОСТ;User Id=ПОЛЬЗОВАТЕЛЬ;Password=ПАРОЛЬ";
//Переменная Connect - это строка подключения в которой:
//БАЗА - Имя базы в MySQL
//ХОСТ - Имя или IP-адрес сервера (если локально то можно и localhost)
//ПОЛЬЗОВАТЕЛЬ - Имя пользователя MySQL
//ПАРОЛЬ - говорит само за себя - пароль пользователя БД MySQL
MySqlConnection myConnection = new MySqlConnection(Connect);
MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection);
myConnection.Open(); //Устанавливаем соединение с базой данных.
//Что то делаем...
myConnection.Close(); //Обязательно закрываем соединение!
Пунктик "//Что делаем..." может отличаться в зависимости от того, делаем ли мы выборку или производим изменения в базе.
Случай первый делаем выборку:
Выборка может быть двух видов: когда запрос возвращает нам одно значение и когда запрос возвращает нам набор значений. Обрабатывать их соответственно можно по разному.
Если запрос нам возвращает одно значение (надо быть уверенным что запрос вернёт именно одно значение иначе будет ошибка).
string znachenie = MyCommand.ExecuteScalar().ToString();
Если запорс нам возвращает множество значений то так:
MySqlDataReader MyDataReader;
MyDataReader = myCommand.ExecuteReader();
while (MyDataReader.Read())
{
string result = MyDataReader.GetString(0); //Получаем строку
int id = MyDataReader.GetInt32(1); //Получаем целое число
}
MyDataReader.Close();
Случай второй, вносим изменения:
Для выполнения скрипта изменяющего данные используется:
MyCommand.ExecuteNonQuery();
Вот собственно и всё, с остальным не сложно разобраться самостоятельно.
привет, Роман
чего-то не получилось у мну на мобильном устройстве. на ББ все нормально, а вот на эмуляторе, после добавлении ссылки на MySql.Data, на стадии развертывания ругается на не хватку памяти. Мож я че упустил
Да, и добавить ссылку смог через последние файлы, во вкладке .NET мускульного файла не было (там вообще список маленький стал когда платформа от покета)
странная весчь — на эмуляторе копирует вместе с новоиспеченной прогой много всяких dll'ек, а на самом кпк все работает и без них!?
мож другие эмуляторы есть с большим объемом памяти, а то у этого (wm 6 mobile) всего 30 метров пзу
Вообще сам не запускал такое на эмуляторе, но пробовал. Основная проблема у меня была в сетевых настройках, там надо сеть настраивать на эмуляторе Microsoft Vitual PC ставить чтобы оно заработало, мне почему-то проще и привычнее на реальных устройствах. В остальном всё как обычно. 30 мегабайт более чем достаточно, уж точно ошибки вылетать не должно. Я тестил на стандартном эмуляторе Win Mobile 6.0 который доставляется к Visual Studio.
Есть один небольшой нюанс — не знаю учли ли вы. В проект включать надо драйвер MySql.Data.CF а не MySql.Data.
Для Win Mobile 6 — я в своём случае использовал .NET Connector версии 5.2.7 (на 5.2.2 допустим пытался — не работало).
На эмулятор при запуске из студии должен автоматом поставится .NET фреймворк. На устройстве (и на эмуляторе тоже — это я проверял) для запуска достаточно только MySql.Data.Cf и исполняемого файла программы, много разных библиотек — точно быть не должно.
коннектор у меня 6.2.2, драйвера mysql.ata.cf не нашел (цеплял MySql.Data), в списке .NET его нет, хотя в папке мускула он есть, как его добавить в проект-то, не вкурю чего-то
ОтветитьMySql.Data.CF — цепляется очень просто. Project -> Add Reference -> Вкладка «Browse» -> Выбираешь саму MySql.Data.CF.dll — и всё, она добавится. В свойствах для библиотеки лучше поставить CopyLockal — в true — чтобы само при компиляции к готовому проекту помещалось.
Ответитьну теперь с подключением CF все гуд, зато теперь другой затык — ругается на открытие БД — myConnection.Open() Что на эмуляторе — что на КПК. ошибку смотриш (на КПК) везде вроде stream, когда запускаеш не устанавливая соединение (через ВиФи) там же — UnableToConnectToHost. Значит соединение есть. В обычной, виндовой платформе тот же код — все пучком (ну за исключением MySql.Data.CF) Мож на маленьком брате открывать соединение подругому надо?
Как обработать ошибки подключения к базе? (нет подключения — не правильный логин-пароль и т.д.)
Я бы проверял, для начала, вот так:
try
{
string myConnectionString = "Database=имя_базы;Data Source=имя_сервера;User Id=пользователь;Password=пароль";
MySqlConnection myConnection = new MySqlConnection(myConnectionString);
myConnection.Open();
myConnection.Close();
MessageBox.Show("Подключение прошло успешно!");
}
catch (Exception ex)
{
MessageBox.Show("Ошибка: " + ex.Message);
}
Строка подключения должна быть именно такая, как в этом примере, проверять лучше на устройстве — устройство должно быть в сети (лучше это проверить предварительно — пропинговать чего нибудь с него например).
Касаемо этой ошибки: «Timeouts are not supported on this stream.» думаю что тут вариантов два:
1 — Сеть — просто не видит сервер (до MySql в этом случае дело даже не доходит) — этот вариант более вероятен.
2 — Драйвер (бывает — но маловероятно) — если описанное выше никак не поможет — можно попробовать с 5.2.7 — с ним точно работает проверял и на Win 5 и на Win 7 — могу выложить примерчик простой (исходник с дистрибутивом и dll-кой) для проверки.
Ещё есть один важный момент, при установке MySql — там задаётся возможен ли удалённый доступ, как вариант может также и пользователь под которым пытаетесь войти — не иметь прав на удалённый доступ. Вобщем проверять коннект лучше от root-а. Ответить
пробовал и на устройстве — все тоже.
1 — сеть — впринципе видеть должен, устройство видит этот же сервак через http, все пучком. Порт открыт для внутреней подсети, устройство находится в ней же (как уже говорил WiFi), цепляюсь от имени root'а
2 — Драйвер — 5.2.7. у меня нет, если скинеш свой (только проверенный 100% тобой) примерчик было бы прекрасно (как интересно поведет себя твой рабочий код на 6.2.2)
p.s. я так думаю что разницы ведь нет — Win CE и Win Mobile, код ведь одинаково должен работать и там и тут?
В общем скачал 6.2.2 проверил — действительно не работает — по всей видимости что-то с самим драйвером. Тестировал на HTC-HD2 (Win Mob 6.5)
Вот результат работы с 6.2.2
Вот результат с 5.2.7
Я на 5.2.7 перешёл поскольку 5.2.2 на Win-6.5 — отказался работать не так давно — тоже всякие чудесные ошибки писал (хотя на Win-5.X и 5.2.2 и 5.2.7 ведут себя замечательно).
Исходник: ExampleMySqlConnect_CE.rar
Сделан как приложение для WinCE — работать будет и на PocketPC и на Mobile.
Драйвера разных версий скачать можно здесь: http://dev.mysql.com/downloads/connector/net/6.1.html
Там правда возможно попросит зарегистрироваться, но это не долго.
Привет, Roman
Устанавливается соединение с БД на localhost.
При попытке соединения с БД на Интернет сервере сообщает Connector «Connector/Net no longer supports server versions prior to 5». Версия коннектора 6.4.4.0
Помогите, пожалуйста, советом. Не пойму куда «копать» ))
«Connector/Net no longer supports server versions prior to 5»
Перевод: Connector/Net более не поддерживает сервера ниже 5-ой версии.
Ваш коннектор 6.4.4.0 не умеет работать с такими старыми версиями сервера, к которому вы обращаетесь.
Следовательно, чтобы решить данную проблему, можно:
1 — использовать более старый Connector — который поддерживает версии MySQL 4.X
2 — использовать MySQL сервер версии 5.X. Ответить
Большое спасибо! Действительно, на localhost MySQL 5.x, а у Интернет провайдера MySQL 4.x. В документации connector-net-en.a4.pdf в Chapter 1 «Connector/Net 6.4 includes support for MySQL Server 5.5, 5.1, and 5.0.» т.е. MySQL 4.x не поддерживается. Поставил Connector 5.1.2 все заработало!
ОтветитьРабота с Postgresql в C#
Не так давно занялся разработкой приложения на C# работающего на базе PostreSQL, появилась информаци (читать далее...)
1098Передача параметров между формами в C#
Часто возникает необходимость передать определённые параметры между формами в одном приложении, напр (читать далее...)
455OpenXML - Пример создания Excel файла на C#
В данной публикации приведен пример генерации Excel файла при помощи библиотеки OpenXML. Отличие это (читать далее...)
438Чтение данных из таблиц Excel
Многие материалы которые я здесь описываю, я размещаю для самого себя, в основном чтобы мучительно д (читать далее...)
250Сортировка списка (List) в C#
На днях понадобилось сортировать списки, удивительно, на сколько это оказалось просто. Допустим, име (читать далее...)
210
Комментарии: