Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел обеспечивает нежное введение в программирование с Соединителем/Сетью. Пример кода пишется в C#, и разрабатывается, чтобы работать и над Microsoft.NET Framework и над Моно.
Это учебное руководство разрабатывается, чтобы разбудить Вас и работающий с Соединителем/Сетью как можно быстрее, это не проникает в детали на любой определенной теме. Однако, следующие разделы этого руководства описывают каждую из тем, представленных в этом учебном руководстве более подробно. В этом учебном руководстве Вы поощряетесь ввести и выполнить код, изменяя это как требуется для Вашей установки.
Это учебное руководство предполагает, что у Вас есть MySQL и Соединитель/Сеть, уже установленный. Это также
предполагает, что Вы установили Мировую базу данных в качестве примера, которая может быть загружена со
Прежде, чем скомпилировать пример кода, удостоверьтесь, что Вы добавили Ссылки на свой проект как
требуется. Требуемые Ссылки System
, System.Data
и
MySql.Data
.
Для Вашего приложения Соединителя/Сети, чтобы соединиться с базой данных MySQL, это должно установить
соединение при использовании a MySqlConnection
объект.
MySqlConnection
конструктор берет строку подключения в качестве одного из ее
параметров. Строка подключения предоставляет необходимую информацию, чтобы сделать соединение с базой данных
MySQL. Строка подключения обсуждается более полно в Разделе
22.2.5.1, "Соединяясь с MySQL Используя Соединитель/Сеть". Для списка поддерживаемых опций
строки подключения см. Раздел 22.2.6,
"Ссылка Опций Строки подключения Соединителя/Сети".
Следующий код показывает, как создать объект соединения:
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(); // Perform database operations } catch (Exception ex) { Console.WriteLine(ex.ToString()); } conn.Close(); Console.WriteLine("Done."); }}
Когда MySqlConnection
конструктор вызывается, это возвращает объект соединения,
который используется для последующих операций базы данных. Откройте соединение прежде, чем любые другие
операции будут иметь место. Перед выходами приложения закройте соединение с базой данных, вызывая Close
на объекте соединения.
Иногда попытка выполнить Open
на соединении объект может перестать работать,
генерируя исключение, которое может быть обработано, используя стандартный код обработки исключений.
В этом разделе Вы изучили, как создать соединение с базой данных MySQL, и открыть и закрыть соответствующий объект соединения.
Как только соединение было установлено с базой данных MySQL, следующий шаг, действительно выполняют
требуемые операции базы данных. Это может быть достигнуто с помощью MySqlCommand
объект.
Вы будете видеть, как создать a MySqlCommand
объект. Как только это было
создано, есть три основных метода интереса, который можно вызвать:
ExecuteReader - имел обыкновение
запрашивать базу данных. Результаты обычно возвращаются в a MySqlDataReader
объект, создаваемый ExecuteReader
.
ExecuteNonQuery - имел обыкновение вставлять и удалять данные.
ExecuteScalar - имел обыкновение возвращать единственное значение.
Однажды a MySqlCommand
объект был создан, Вы вызовете один из вышеупомянутых
методов на нем, чтобы выполнить работу базы данных, те, которые выполняют запрос. Результаты обычно
возвращаются в a 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."); }}
Когда соединение было создано и открыто, код тогда создает a MySqlCommand
объект. Отметьте, что SQL-запрос, который будет выполнен, передают к MySqlCommand
конструктор. ExecuteReader
метод
тогда используется, чтобы генерировать a MySqlReader
объект. MySqlReader
объект содержит результаты, сгенерированные SQL, выполняемым на
объекте команды. Как только результаты были получены в a MySqlReader
объект,
результаты могут быть обработаны. В этом случае информация распечатывается a 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
метод может использоваться, чтобы
возвратить единственное значение. Снова, это является прямым, как a 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
на объекте команды.
Ранее, при использовании MySqlDataReader
, соединение с базой данных непрерывно
сохранялось, если явно не закрыто. Также возможно работать способом, где соединение только устанавливается
при необходимости. Например, в этом режиме, соединение могло быть установлено, чтобы считать блок данных,
данные могли тогда быть изменены приложением как требуется. Соединение могло тогда быть восстановлено,
только если и когда приложение записывает данные обратно к базе данных. Это разъединяет рабочий набор данных
от базы данных.
Этот разъединенный режим работы с данными поддерживается Соединителем/Сетью. Есть несколько частей, включенных в разрешение этого метода работать:
Набор данных - Набор данных является
областью, в которой данные загружаются, чтобы считать или изменить это. A DataSet
объект инстанцируют, который может сохранить многократные таблицы данных.
Адаптер данных - Адаптер Данных
является интерфейсом между Набором данных и базой данных непосредственно. Адаптер Данных
ответственен за эффективное управление соединениями с базой данных, открываясь и закрывая их как
требуется. Адаптер Данных создается, инстанцируя объекта MySqlDataAdapter
class. MySqlDataAdapter
у объекта есть два основных метода: Fill
который читает данные в Набор
данных, и Update
, который пишет данные от Набора данных до базы данных.
Разработчик команды - Разработчик
Команды является объектом поддержки. Разработчик Команды работает в соединении с Адаптером Данных.
Когда a MySqlDataAdapter
объект создается, ему обычно дают начальный
оператор SELECT. От этого SELECT
оператор Разработчик Команды может решить соответствие INSERT
, UPDATE
и DELETE
операторы, которые были бы обязаны обновлять базу данных. Создать Разработчика Команды, объект class
MySqlCommandBuilder
создается.
Каждый из этих классов будет теперь обсужден более подробно.
Инстанцирование объекта DataSet
A 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
метод является a MySqlDataAdapter
метод, Адаптер Данных знает, как установить соединение с базой данных и получить необходимые данные, и затем
заполняет Набор данных когда Fill
метод вызывают. Второй параметр "Страна" является таблицей в Наборе
данных, чтобы обновить.
Обновление Набора данных
Данными в Наборе данных может теперь управлять приложение как требуется. В некоторый момент изменения к
данным должны будут быть записаны обратно к базе данных. Это достигается через a MySqlDataAdapter
метод, Update
метод.
daCountry.Update(dsCountry, "Country");
Снова, Набор данных и таблица в пределах Набора данных, чтобы обновить определяются.
Рабочий Пример
Взаимодействия между DataSet
, MySqlDataAdapter
и
MySqlCommandBuilder
классы могут немного сбить с толку, таким образом, их
работа может, возможно, быть лучше всего иллюстрирована, работая код.
В этом примере данные от Мировой базы данных читаются в управление Представлением Сетки Данных. Здесь, данные могут быть просмотрены и изменены прежде, чем нажать кнопку обновления. Кнопка обновления тогда активирует код, чтобы записать изменения обратно к базе данных. Код использует принципы, объясненные выше. Приложение было создано, используя 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!"; } }}
Выполнение приложения показывают ниже:
Эта часть учебного руководства показывает Вам, как использовать параметры в Вашем приложении Соединителя/Сети.
Хотя возможно создать строки SQL-запроса непосредственно из ввода данных пользователем, это не желательно, поскольку это не предотвращает ошибочную или злонамеренную вводимую информацию. Более безопасно использовать параметры, поскольку они будут обработаны как полевые данные только. Например, предположите, что следующий запрос был создан из ввода данных пользователем:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = "+user_continent;
Если строка user_continent
прибыл из управления Текстовым полем, потенциально
не будет никакого управления строкой, вводимой пользователем. Пользователь мог ввести строку, которая
генерирует ошибку периода выполнения, или в худшем случае фактически вредит системе. При использовании
параметров не возможно сделать это, потому что параметр только когда-либо обрабатывается как полевой
параметр, а не произвольная часть кода SQL.
Тот же самый запрос записанный пользователь параметр для ввода данных пользователем был бы:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = @Continent";
Отметьте, что параметру предшествуют символ, чтобы указать, что это должно быть обработано в качестве параметра.
Так же как отмечая позицию параметра в строке запроса, необходимо добавить параметр к объекту Команды. Это иллюстрируется следующим фрагментом кода:
cmd.Parameters.AddWithValue("@Continent", "North America");
В этом примере строка "Северная Америка" предоставляется как значение параметра статически, но в более практическом примере это прибыло бы из управления вводом данных пользователем.
Дальнейший пример иллюстрирует полный процесс:
using System;using System.Data;using MySql.Data;using MySql.Data.MySqlClient;public class Tutorial5{ 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=@Continent"; MySqlCommand cmd = new MySqlCommand(sql, conn); Console.WriteLine("Enter a continent e.g. 'North America', 'Europe': "); string user_input = Console.ReadLine(); cmd.Parameters.AddWithValue("@Continent", user_input); MySqlDataReader rdr = cmd.ExecuteReader(); while (rdr.Read()) { Console.WriteLine(rdr["Name"]+" --- "+rdr["HeadOfState"]); } rdr.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } conn.Close(); Console.WriteLine("Done."); }}
В этой части учебного руководства Вы имеете, видят, как использовать параметры, чтобы сделать Ваш код более безопасным.
Этот раздел иллюстрирует, как работать с хранимыми процедурами. Помещение интенсивных действий базы данных в
хранимые процедуры позволяет Вам определять API для своего приложения базы данных. Можно снова использовать
этот API через многократные приложения и языки параллельного программирования. Этот метод избегает
копировать код базы данных, экономя время и усилие, когда Вы делаете обновления из-за изменений схемы,
настройте производительность запросов, или добавьте новые операции базы данных для журналирования,
безопасности, и так далее. Прежде, чем работать через это учебное руководство, ознакомьте себя с CREATE
PROCEDURE
и CREATE
FUNCTION
операторы, которые создают различные виды сохраненных подпрограмм.
В целях этого учебного руководства Вы создадите простую хранимую процедуру, чтобы видеть, как его можно вызвать от Соединителя/Сети. В программе MySQL Client соединитесь с Мировой базой данных и введите следующую хранимую процедуру:
DELIMITER //CREATE PROCEDURE country_hos(IN con CHAR(20))BEGIN SELECT Name, HeadOfState FROM Country WHERE Continent = con;END //DELIMITER ;
Тест, что хранимая процедура работает как ожидалось, вводя следующее в mysql интерпретатор команд:
CALL country_hos('Europe');
Отметьте, что сохраненная подпрограмма берет единственный параметр, который является континентом, чтобы ограничить Ваш поиск.
Подтвердив, что хранимая процедура присутствует и корректна, можно видеть, как получить доступ к ней от Соединителя/Сети.
Вызов хранимой процедуры из Вашего приложения Соединителя/Сети подобен методам, которые Вы видели ранее в
этом учебном руководстве. A MySqlCommand
объект создается, а скорее чем взятие
SQL-запроса в качестве параметра, это берет имя хранимой процедуры, чтобы вызвать. Установите MySqlCommand
возразите против типа хранимой процедуры, как показано следующим
фрагментом кода:
string rtn = "country_hos";MySqlCommand cmd = new MySqlCommand(rtn, conn);cmd.CommandType = CommandType.StoredProcedure;
В этом случае хранимая процедура требует, чтобы Вы передали параметр. Это может быть достигнуто, используя методы, замеченные в предыдущем разделе по параметрам, Раздел 22.2.4.1.4, "Работая с Параметрами", как показано в следующем фрагменте кода:
cmd.Parameters.AddWithValue("@con", "Europe");
Значение параметра @con
возможно, более реалистично прибыл из управления вводом
данных пользователем, но для простоты оно устанавливается как статическая строка в этом примере.
В этой точке все устанавливается, и можно вызвать подпрограмму, используя методы, также изученные в более
ранних разделах. В этом случае, ExecuteReader
метод MySqlCommand
объект используется.
Полный рабочий код для примера хранимой процедуры показывают ниже:
using System;using System.Data;using MySql.Data;using MySql.Data.MySqlClient;public class Tutorial6{ 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 rtn = "country_hos"; MySqlCommand cmd = new MySqlCommand(rtn, conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@con", "Europe"); 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."); }}
В этом разделе Вы видели, как вызвать хранимую процедуру от Соединителя/Сети. В настоящий момент это завершает наше вводное учебное руководство при программировании с Соединителем/Сетью.