В этой публикации я приведу пример более совершенного класса для работы с базой данных, нежели приводил ранее в этой публикации. Смысл как и прежде в минимизации кода и приведения его (кода) в более удобочитаемый вид.
В примере ниже, в отличие от предыдущего, в отдельном классе реализованы не только методы выполняющие запросы типа (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