Класс для работы с базой данных (на примере MySQL)

В этой публикации я приведу пример более совершенного класса для работы с базой данных, нежели приводил ранее в этой публикации. Смысл как и прежде в минимизации кода и приведения его (кода) в более удобочитаемый вид.
В примере ниже, в отличие от предыдущего, в отдельном классе реализованы не только методы выполняющие запросы типа (Scalar и NonQuery) но и метод возвращающий набор данных в DataTable. При этом продумана обработка исключительных ситуаций.

Привожу код как есть, он весь прокомментирован, на столько на сколько это необходимо для понимания.

Сам класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using System.Data;

namespace MySqlLib
{
    /// 
    /// Набор компонент для простой работы с MySQL базой данных.
    /// 
    public class MySqlData
    {

        /// 
        /// Методы реализующие выполнение запросов с возвращением одного параметра либо без параметров вовсе.
        /// 
        public class MySqlExecute
        {

            /// 
            /// Возвращаемый набор данных.
            /// 
            public class MyResult
            {
                /// 
                /// Возвращает результат запроса.
                /// 
                public string ResultText;
                /// 
                /// Возвращает True - если произошла ошибка.
                /// 
                public string ErrorText;
                /// 
                /// Возвращает текст ошибки.
                /// 
                public bool HasError;
            }

            /// 
            /// Для выполнения запросов к MySQL с возвращением 1 параметра.
            /// 
            /// Текст запроса к базе данных
            /// Строка подключения к базе данных
            /// Возвращает значение при успешном выполнении запроса, текст ошибки - при ошибке.
            public static MyResult SqlScalar(string sql, string connection)
            {
                MyResult result = new MyResult();
                try
                {
                    MySql.Data.MySqlClient.MySqlConnection connRC = new MySql.Data.MySqlClient.MySqlConnection(connection);
                    MySql.Data.MySqlClient.MySqlCommand commRC = new MySql.Data.MySqlClient.MySqlCommand(sql, connRC);
                    connRC.Open();
                    try
                    {
                        result.ResultText = commRC.ExecuteScalar().ToString();
                        result.HasError = false;
                    }
                    catch (Exception ex)
                    {
                        result.ErrorText = ex.Message;
                        result.HasError = true;
                    }
                    connRC.Close();
                }
                catch (Exception ex)//Этот эксепшн на случай отсутствия соединения с сервером.
                {
                    result.ErrorText = ex.Message;
                    result.HasError = true;
                }
                return result;
            }


            /// 
            /// Для выполнения запросов к MySQL без возвращения параметров.
            /// 
            /// Текст запроса к базе данных
            /// Строка подключения к базе данных
            /// Возвращает True - ошибка или False - выполнено успешно.
            public static MyResult SqlNoneQuery(string sql, string connection)
            {
                MyResult result = new MyResult();
                try
                {
                    MySql.Data.MySqlClient.MySqlConnection connRC = new MySql.Data.MySqlClient.MySqlConnection(connection);
                    MySql.Data.MySqlClient.MySqlCommand commRC = new MySql.Data.MySqlClient.MySqlCommand(sql, connRC);
                    connRC.Open();
                    try
                    {
                        commRC.ExecuteNonQuery();
                        result.HasError = false;
                    }
                    catch (Exception ex)
                    {
                        result.ErrorText = ex.Message;
                        result.HasError = true; 
                    }
                    connRC.Close();
                }
                catch (Exception ex)//Этот эксепшн на случай отсутствия соединения с сервером.
                {
                    result.ErrorText = ex.Message;
                    result.HasError = true;
                }
                return result;
            }
             
        }

        /// 
        /// Методы реализующие выполнение запросов с возвращением набора данных.
        /// 
        public class MySqlExecuteData
        {
            /// 
            /// Возвращаемый набор данных.
            /// 
            public class MyResultData
            {
                /// 
                /// Возвращает результат запроса.
                /// 
                public DataTable ResultData;
                /// 
                /// Возвращает True - если произошла ошибка.
                /// 
                public string ErrorText;
                /// 
                /// Возвращает текст ошибки.
                /// 
                public bool HasError;
            }


            /// 
            /// Выполняет запрос выборки набора строк.
            /// 
            /// Текст запроса к базе данных
            /// Строка подключения к базе данных
            /// Возвращает набор строк в DataSet.
            public static MyResultData SqlReturnDataset(string sql, string connection)
            {
                MyResultData result = new MyResultData();
                try
                {
                    MySql.Data.MySqlClient.MySqlConnection connRC = new MySql.Data.MySqlClient.MySqlConnection(connection);
                    MySql.Data.MySqlClient.MySqlCommand commRC = new MySql.Data.MySqlClient.MySqlCommand(sql, connRC);
                    connRC.Open();

                    try
                    {
                        MySql.Data.MySqlClient.MySqlDataAdapter AdapterP = new MySql.Data.MySqlClient.MySqlDataAdapter();
                        AdapterP.SelectCommand = commRC;
                        DataSet ds1 = new DataSet();
                        AdapterP.Fill(ds1);
                        result.ResultData = ds1.Tables[0];
                    }
                    catch (Exception ex)
                    {
                        result.HasError = true;
                        result.ErrorText = ex.Message;
                    }
                    connRC.Close();
                }
                catch (Exception ex)//Этот эксепшн на случай отсутствия соединения с сервером.
                {
                    result.ErrorText = ex.Message;
                    result.HasError = true;
                }
            
                return result;

            }

        }
    }
}

Пример использования:

MySqlLib.MySqlData.MySqlExecuteData.MyResultData result = new MySqlLib.MySqlData.MySqlExecuteData.MyResultData();

result = MySqlLib.MySqlData.MySqlExecuteData.SqlReturnDataset("select * from table_name", "Database=base;Data Source=localhost;User Id=root;Password=pass");

            if (result.HasError == false)
            {
                dataGridView1.Columns.Clear();
                dataGridView1.DataSource = result.ResultData.DefaultView;
            }
            else
            {
                MessageBox.Show(result.ErrorText);
            }

В данном примере происходит заполнение DataGridView данными из таблицы базы данных, при этом для всего действия, по сути необходима пара строчек кода.

http://www.kbss.ru/blog/lang_c_sharp/96.html

Добавить комментарий

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