6.1.1 Объект MySqlConnection
Чтобы приложение MySQL Connector / NET могло подключиться к базе данных MySQL, оно должно установить соединение с помощью MySqlConnectionобъекта.
Следующий код показывает, как создать объект подключения /
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial1
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
Когда MySqlConnectionконструктор вызывается, он возвращает объект соединения, который используется для последующих операций с базой данных. Откройте соединение перед выполнением любых других операций. Перед выходом из приложения закройте соединение с базой данных, вызвав Close объект соединения.
Иногда попытка выполнить Openобъект подключения может потерпеть неудачу, генерируя исключение, которое может быть обработано с использованием стандартного кода обработки исключений.
В этом разделе вы узнали, как создать соединение с базой данных MySQL, а также открыть и закрыть соответствующий объект соединения.
Объект MySqlCommand
Когда соединение с базой данных MySQL установлено, следующим шагом является выполнение требуемых операций с базой данных. Это может быть достигнуто за счет использования MySqlCommandобъекта.
Вы увидите, как создать MySqlCommand объект. После того, как он был создан, вы можете вызвать три основных метода:
ExecuteReaderзапросить базу данных. Результаты обычно возвращаются в MySqlDataReaderобъект, созданный ExecuteReader.
ExecuteNonQuery вставлять, обновлять и удалять данные.
ExecuteScalar вернуть единственное значение.
После того, как MySqlCommandобъект был создан, вы вызовете один из предыдущих методов для него, чтобы выполнить операцию базы данных, например выполнить запрос. Результаты обычно возвращаются в MySqlDataReaderобъект, а затем обрабатываются, например, результаты могут отображаться. Следующий код демонстрирует, как это можно сделать.
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial2
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent='Oceania'";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine(rdr[0]+" -- "+rdr[1]);
}
rdr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
Когда соединение создано и открыто, код создает MySqlCommandобъект. Затем выполняемый SQL-запрос передается в MySqlCommandконструктор. Затем этот ExecuteReaderметод используется для создания MySqlReaderобъекта. MySqlReaderОбъект содержит результаты , полученные с помощью SQL , выполняемой на объекте команды. Как только результаты были получены в MySqlReader объекте, результаты могут быть обработаны. В этом случае информация распечатывается whileциклом. Наконец, MySqlReaderобъект удаляется путем запуска его Closeметода на нем.
В следующем примере вы увидите, как использовать ExecuteNonQueryметод.
Процедура выполнения ExecuteNonQuery вызова метода более проста, поскольку нет необходимости создавать объект для хранения результатов. Это потому, что ExecuteNonQuery используется только для вставки, обновления и удаления данных. Следующий пример иллюстрирует простое обновление Countryтаблицы:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial3
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "INSERT INTO Country (Name, HeadOfState, Continent) VALUES ('Disneyland','Mickey Mouse', 'North America')";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
Запрос строится, объект команды создан и ExecuteNonQueryметод вызывается для объекта команды. Вы можете получить доступ к своей базе данных MySQL с помощью интерпретатора команд mysql и убедиться, что обновление было выполнено правильно.
Наконец, вы увидите, как ExecuteScalar метод может использоваться для возврата одного значения. Опять же, это просто, так как MySqlDataReaderобъект не требуется хранить результаты, подойдет простая переменная. Следующий код иллюстрирует, как использовать ExecuteScalar:
using System;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
public class Tutorial4
{
public static void Main()
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
Console.WriteLine("Connecting to MySQL...");
conn.Open();
string sql = "SELECT COUNT(*) FROM Country";
MySqlCommand cmd = new MySqlCommand(sql, conn);
object result = cmd.ExecuteScalar();
if (result != null)
{
int r = Convert.ToInt32(result);
Console.WriteLine("Number of countries in the world database is: " + r);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
conn.Close();
Console.WriteLine("Done.");
}
}
В этом примере используется простой запрос для подсчета строк в Countryтаблице. Результат получается при вызове ExecuteScalarобъекта команды.
6.1.3 Работа с разделенными данными
Ранее при использовании MySqlDataReaderсоединение с базой данных постоянно поддерживалось, если явно не закрыто. Также возможно работать таким образом, когда соединение устанавливается только при необходимости. Например, в этом режиме может быть установлено соединение для чтения фрагмента данных, а затем данные могут быть изменены приложением по мере необходимости. Соединение может быть восстановлено только в том случае, если и когда приложение записывает данные обратно в базу данных. Это разъединяет рабочий набор данных из базы данных.
Этот разъединенный режим работы с данными поддерживается MySQL Connector / NET. Есть несколько частей, позволяющих этому методу работать:
Набор данных. Набор данных - это область, в которую загружаются данные для чтения или изменения. Создается DataSetэкземпляр объекта, который может хранить несколько таблиц данных.
Адаптер данных. Адаптер данных - это интерфейс между набором данных и самой базой данных. Адаптер данных отвечает за эффективное управление подключениями к базе данных, открывая и закрывая их по мере необходимости. Адаптер данных создается путем создания экземпляра объекта MySqlDataAdapterкласса. У MySqlDataAdapterобъекта есть два основных метода: Fillкоторый считывает данные в набор данных и Updateкоторый записывает данные из набора данных в базу данных.
Командный строитель. Command Builder является вспомогательным объектом. Command Builder работает в сочетании с адаптером данных. Когда MySqlDataAdapterобъект создается, ему обычно дается начальная инструкция SELECT. Из этого SELECTзаявления командования Builder может работать соответствующее INSERT, UPDATEи DELETEзаявление , которые будут необходимы для обновления базы данных. Чтобы создать Command Builder, создается объект класса MySqlCommandBuilder.
Каждый из этих классов будет теперь обсужден более подробно.
DataSetОбъект может быть создан просто, как показано в следующем коде-фрагменте кода:
DataSet dsCountry;
...
dsCountry = new DataSet();
Хотя это создает DataSetобъект, он еще не заполнил его данными. Для этого требуется адаптер данных.
Создание объекта MySqlDataAdapter
MySqlDataAdapterМогут быть созданы , как показано в следующем примере:
MySqlDataAdapter daCountry;
...
string sql = "SELECT Code, Name, HeadOfState FROM Country WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
Заметка
MySqlDataAdapterДается SQL , указав данные для работы с.
Создание объекта MySqlCommandBuilder
После MySqlDataAdapterсоздания необходимо сгенерировать дополнительные операторы, необходимые для вставки, обновления и удаления данных. Есть несколько способов сделать это, но в этом уроке вы увидите, как это проще всего сделать MySqlCommandBuilder. Следующий фрагмент кода иллюстрирует, как это делается:
MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
Заметка
MySqlDataAdapterОбъект передается в качестве параметра командной строителем.
Чтобы сделать что-нибудь полезное с данными из вашей базы данных, вам нужно загрузить их в набор данных. Это одно из заданий MySqlDataAdapterобъекта, и выполняется его Fillметодом. Следующий пример кода иллюстрирует эту точку.
DataSet dsCountry;
...
dsCountry = new DataSet();
...
daCountry.Fill(dsCountry, "Country");
FillМетод является MySqlDataAdapterметод, и адаптер данных знает , как установить соединение с базой данных и извлекать необходимые данные, а затем заполнить набор данных , когда Fillвызывается метод. Второй параметр « Страна » - это таблица в наборе данных для обновления.
Данные в наборе данных теперь могут обрабатываться приложением по мере необходимости. В какой-то момент изменения данных необходимо будет записать обратно в базу данных. Это достигается с помощью MySqlDataAdapterметода, Updateметода.
daCountry.Update(dsCountry, "Country");
Опять же, указан набор данных и таблица в наборе данных для обновления.
Взаимодействия между DataSet, MySqlDataAdapterи MySqlCommandBuilderклассы могут быть немного запутанным, так что их работа может быть , возможно , лучше всего иллюстрируется рабочий код.
В этом примере данные из worldбазы данных считываются в элемент управления Data Grid View. Здесь данные могут быть просмотрены и изменены до нажатия кнопки обновления. Затем кнопка обновления активирует код для записи изменений обратно в базу данных. Код использует принципы, описанные ранее. Приложение было построено с использованием Microsoft Visual Studio для размещения и создания элементов управления пользовательского интерфейса, но основной код, который использует описанные выше классы ключей, показан в следующем примере кода и является переносимым.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
MySqlDataAdapter daCountry;
DataSet dsCountry;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
MySqlConnection conn = new MySqlConnection(connStr);
try
{
label2.Text = "Connecting to MySQL...";
string sql = "SELECT Code, Name, HeadOfState FROM Country WHERE Continent='North America'";
daCountry = new MySqlDataAdapter (sql, conn);
MySqlCommandBuilder cb = new MySqlCommandBuilder(daCountry);
dsCountry = new DataSet();
daCountry.Fill(dsCountry, "Country");
dataGridView1.DataSource = dsCountry;
dataGridView1.DataMember = "Country";
}
catch (Exception ex)
{
label2.Text = ex.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
daCountry.Update(dsCountry, "Country");
label2.Text = "MySQL Database Updated!";
}
}
}
На следующем рисунке показано приложение запущено. Приложение World Database Application обновило данные в трех столбцах: Код, Имя и HeadOfState.