Работаем с MySql

Июнь 10th, 2011 § 0 comments

Мне часто в последнее время приходится работать с базами данных, вот решил немного упорядочить свои познания в этом. Не большой экскурс, MySQL это свободно распространяемая, очень популярная БД, некий стандарт де-факто в вебе, хотя после приобретения последней, компанией Oracle бытуют мнения что продукт захиреет либо превратится в коммерческий, ну что же поживем увидим. Для работы с этой БД в .NET на нужен коннектор, скачать его можно отсюда. После скачивания конектора, ставим его и приступаем к работе.

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

  1. Обычный запрос, когда выбираются данные (SELECT *FROM users)
  2. Скалярный запрос, когда получаем некоторое число (SELECT COUNT(*) FROM users)
  3. Команда БД, когда запрос производит некоторую манипуляцию с базой или её структурой (DROP TABLE users)

Вот такое условное деление, ну теперь ближе к коду. Все достаточно просто сначала мы подключаемся к базе заполнив инициализирующую строку, где вводим имя базы, хост, логин и пасс. Открываем соединение. Создаем экземпляр класса MySqlCommand с помощью него мы будем исполнять запросы. Далее в классе мы заполняем, сам запрос и указываем к какому соединению он относится. В конце мы выполняем запрос, получая данные в MySqlDataReader. Как видите данный запросо относится к запросу на выборку данных.


MySqlConnection conn = new MySqlConnection(String.Format("Database={0};Data Source={1};User Id={2};Password={3}", "database", "localhost", "root", "123"));
 conn.Open();
 MySqlCommand query = new MySqlCommand();
 MySqlDataReader reader;
 query.CommandText = "SELECT *FROM users";
 query.Connection = conn;
 reader = query.ExecuteReader();
 while (reader.Read())
 {
 //читаем данные
 }

Рассмотрим подробнее MySqlDataReader как видно из листинга что бы прочитать следующую порцию данных используется ф-ция Read(). Чтобы узнать количество полей извлеченных из базы нужно воспользоваться свойством FieldCount. Что бы получить название поля используем метод GetName(i) i- тут номер поля начинается с нуля. Думаю лучше показать это на примере.


string FieldName="";

string FieldValue="":

while (reader.Read())
 {

for(int i=0;i<reader.FieldCount;i++)
{

if (!reader.IsDBNull(i))
 {

FieldName=reader.GetName(i);

FieldValue=reader.GetString(i);
 }

}

Таким образом мы получим данные, у меня здесь нет проверок, т.к. это просто примеры, но вам следует их расставить, а именно заключить в блоки try catch соединение с базой и выполнения запросов, так же при чтении из базы помните что нужно проверять, значение на не равенство null иначе будет получать краши, при первых не заполненных полях в базе как это показано в примере. Читать можно данные не только как строки, но и как битовые массивы, целые, числа с плавающей запятой. Общий принцип один и тот же, за более подробной информацией прошу сюда

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


object retval = new object();

query.CommandText = "SELECT COUNT(*) FROM users";
 query.Connection = conn;
 retval= query.ExecuteScalar();

int result=int.Parse(retval.ToString());

Особенность здесь в том что я не использую приведение к Int32 как я видел в большинстве примеров, у меня почему-то не работало, так что сначала присываю, возвращенное значение переменной, а потом через приведение к строке и вызова int.Parse() получаею возвращенное значение.

Ну и осталась нам разобрать вопрос, как выполнять команды БД и как вставлять данные.


query.CommandText = "DROP TABLE users";
 query.Connection = conn;
 retval= query.ExecuteNonQueryr();

Пример со вставкой


query.CommandText = String.Format("INSERT INTO table1 (name,balance) VALUES ('{0}','{1}')",name,balance);
 query.Connection = conn;
 retval= query.ExecuteNonQueryr();

Ну вот вроде и все основная идея думаю понятна, вообще я уверен еще очень много фишек которые стоит осветить, но как будет время обязательно. Это основы которых вам хватит, на первое время, остальное зависит от вас.

Оставить комментарий

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

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн