Жизнь это - мгновения, промежутки. Ночь ушла, солнце скоро взойдет. Сделайте эти промежутки настолько прекрасными насколько это возможно - наполненными молчанием, наполненными благодарностью к существованию, которое дало вам шанс, благодарностью по отношению ко всем тем, кто вам помог. И ждите.


19 января 2020 г.

Подключение к MySql C# Си шарп

источник https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-sql-command.html

6.1.1 Объект MySqlConnection

Чтобы приложение MySQL Connector / NET могло подключиться к базе данных MySQL, оно должно установить соединение с помощью MySqlConnectionобъекта.
MySqlConnectionКонструктор принимает строку соединения в качестве одного из параметров. Строка подключения предоставляет необходимую информацию для подключения к базе данных MySQL. Строка подключения обсуждается более подробно в главе 4, Соединения / NET-соединения . Список поддерживаемых параметров строки подключения см. В разделе 4.5, «Справочник по параметрам подключения Connector / NET 8.0» .
Следующий код показывает, как создать объект подключения /
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, а также открыть и закрыть соответствующий объект соединения.

Объект 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 может работать соответствующее INSERTUPDATEи DELETEзаявление , которые будут необходимы для обновления базы данных. Чтобы создать Command Builder, создается объект класса MySqlCommandBuilder.
Каждый из этих классов будет теперь обсужден более подробно.

Создание объекта DataSet

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");
Опять же, указан набор данных и таблица в наборе данных для обновления.

Рабочий пример

Взаимодействия между DataSetMySqlDataAdapterи 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.
Рисунок 6.1 World Database Application
Содержание описано в окружающем тексте.

6.1.4 Работа с параметрами

В этой части руководства показано, как использовать параметры в приложении MySQL Connector / NET.
Хотя можно создавать строки SQL-запроса непосредственно из пользовательского ввода, это не рекомендуется, поскольку не предотвращает ввод ошибочной или вредоносной информации. Безопаснее использовать параметры, так как они будут обрабатываться только как полевые данные. Например, представьте, что следующий запрос был создан из пользовательского ввода:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = "+user_continent;
Если строка user_continentполучена из элемента управления Text Box, потенциально не будет никакого контроля над строкой, введенной пользователем. Пользователь может ввести строку, которая генерирует ошибку во время выполнения, или в худшем случае фактически наносит вред системе. При использовании параметров это невозможно сделать, поскольку параметр всегда обрабатывается только как параметр поля, а не как произвольный фрагмент кода SQL.
Тот же запрос, написанный с использованием параметра для пользовательского ввода:
string sql = "SELECT Name, HeadOfState FROM Country WHERE Continent = @Continent";
Заметка
Параметру предшествует символ «@», указывающий, что его следует рассматривать как параметр.
Помимо отметки положения параметра в строке запроса необходимо добавить параметр в объект Command. Это иллюстрируется следующим фрагментом кода:
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.");
    }
}
В этой части руководства вы узнаете, как использовать параметры, чтобы сделать ваш код более безопасным.
В этой части руководства показано, как использовать параметры в приложении MySQL Connector / NET.

Комментариев нет:

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