Lớp DataAccess và cách thực hiện mô hình 3 lớp
Các bài trước tại blog Đôn Bá Đạo là quá đủ cho công việc lập trình mô hình 3 lớp sử dụng procdure.#TeamThichDiHoc
Lớp dataAccess
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace DataAccess { public class Data { ////// Hàm tạo connect kết nối cơ sở dữ liệu /// public SqlConnection conn; public SqlDataAdapter myAdapter; public Data() { conn = new SqlConnection("Initial Catalog=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=kiemtra185;Data Source=."); } public SqlConnection openConnect() { if (conn.State == ConnectionState.Closed || conn.State == ConnectionState.Broken) { conn.Open(); } return conn; } ////// Hàm lấy giá trị bảng từ Procdure trong sql /// /// Tên của procdure /// tham số của procdure ///trả về 1 datatable public DataTable executeSelectQuery(String _query, SqlParameter[] sqlParameter) { SqlCommand myCommand = new SqlCommand(); DataTable dataTable = new DataTable(); myAdapter = new SqlDataAdapter(); conn = openConnect(); dataTable = null; DataSet ds = new DataSet(); try { myCommand.Connection = conn; myCommand.CommandText = _query; myCommand.Parameters.AddRange(sqlParameter); myCommand.ExecuteNonQuery(); myAdapter.SelectCommand = myCommand; myAdapter.Fill(ds); dataTable = ds.Tables[0]; } catch (SqlException e) { return null; } return dataTable; } ////// Hàm thêm mới , xóa ,sửa dữ liệu với procudre /// /// Truyền tên của procdure trong SQL /// Khởi tạo 1 sqlparameter dạng mảng để truyền tham số về ///Trả về kiểu số nguyên public int executeInsertQuery(String _query, SqlParameter[] sqlParameter) { int kq = -1; SqlCommand myCommand = new SqlCommand(); SqlConnection conn = openConnect(); myAdapter=new SqlDataAdapter (); myCommand.Connection = conn; myCommand.CommandText = _query; myCommand.Parameters.AddRange(sqlParameter); myAdapter.InsertCommand = myCommand; //conn.Open(); return kq = myCommand.ExecuteNonQuery(); } }
Đối với cơ sở dữ liệu có nhiều table thì chúng ta sẽ tạo ra nhiều lớp để thực hiện công việc insert,update ,show dữ liệu
Class DmLop trong C#
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using DataAccess; using System.Windows.Forms; namespace BussinessLogic { public class DmLop { private string malop; public string Malop { get { return malop; } set { malop = value; } } private string tenlop; public string Tenlop { get { return tenlop; } set { tenlop = value; } } Data da = new Data(); public DataTable showTblClass() { SqlParameter[] sqlPara = new SqlParameter[0]; return da.executeSelectQuery("pc_showDMLOP",sqlPara); } public int InsertDmLop(DmLop Lop) { SqlParameter[] sqlPara = { new SqlParameter("@malop", SqlDbType.NVarChar, 50), new SqlParameter("@tenlop", SqlDbType.NVarChar, 50) }; sqlPara[0].Value = Lop.malop; sqlPara[1].Value = Lop.tenlop; return da.executeInsertQuery("pc_InsertDmLOP @malop,@tenlop", sqlPara); } public int DeleteDmLop(string malop, string tenlop) { SqlParameter[] sqlPara = new SqlParameter[2]; sqlPara[0] = new SqlParameter("@malop", SqlDbType.NVarChar, 50); sqlPara[0].Value = malop; sqlPara[1] = new SqlParameter("@tenlop", SqlDbType.NVarChar, 50); sqlPara[1].Value = tenlop; return da.executeInsertQuery("pc_DeleteDmLop @malop,@tenlop", sqlPara); } public int UpdateDmLop(string malop, string tenlop) { SqlParameter[] sqlPara = new SqlParameter[2]; sqlPara[0] = new SqlParameter("@malop", SqlDbType.NVarChar, 50); sqlPara[0].Value = malop; sqlPara[1] = new SqlParameter("@tenlop", SqlDbType.NVarChar, 50); sqlPara[1].Value = tenlop; return da.executeInsertQuery("pc_updateDmLOP @malop,@tenlop", sqlPara); } public void rowsClick(string malop, string tenlop,DataGridView dgv,DataGridViewCellMouseEventArgs e) { DataGridViewRow dr = new DataGridViewRow(); dr = dgv.Rows[e.RowIndex]; malop = dr.Cells[0].Value.ToString(); dr.Dispose(); } } }
Insert dữ liệu vào form chính
//Thêm dữ liệu. try { if (txtMalop.Text != "" || txtTenlop.Text != "") { DmLop dmLop = new DmLop(); dmLop.Malop = txtMalop.Text; dmLop.Tenlop = txtTenlop.Text; if (dmLop.InsertDmLop(dmLop) > 0) { lblMessage.Text = "* Bạn đã thêm thành công"; dataShowDMLOP(); } else { lblMessage.Text ="* Bạn đã thêm thất bại"; } } } catch(Exception ex) { lblMessage.Text = ex.Message; } //Hiển thị dữ liệu public void dataShowDMLOP() { DmLop dmLop = new DmLop(); grid_showLop.DataSource= dmLop.showTblClass(); }
Quy cách đặt tên
Đối với ClassClass+Tên TableVí dụ:
ClassDeskGroupĐối với Form
Tdh+Tên tableVí Dụ:
TdhDeskGroup
Đối với Hàm + Procdure
Procdure
sp_+Tên procVí dụ
sp_InsertDesk
Tất cả đều đặt tên tiếng anh