C# – Mô hình 3 lớp đơn giản – Xây dựng mô hình 3 lớp: Xây dựng Data Access
Tại sao mình lại xây dựng Data Access trước? Đơn giản là đây là lớp mà ta xử lý bên database, làm trước thì design GUI xong chỉ việc bỏ vào sử dụng thôi 😀
Điều quan trọng đầu tiên, chúng ta cần tạo class DBConnect.cs với nội dung như sau:
using System.Data.SqlClient;
namespace DAL_QuanLy
{
public class DBConnect
{
protected SqlConnection _conn = new SqlConnection("Data Source=ADMINISTRATOR\SQLEXPRESS;Initial Catalog=ThanhVien;Integrated Security=True");
}
}
Chúng ta sẽ tạo SqlConnection và khởi tạo luôn, sau này các class DAL chúng ta chỉ cần kế thừa class DBConnect là có thể sử dụng _conn thoải mái ko cần khởi tạo lại.
Các bạn nhớ sửa lại connection string cho chuẩn bên máy của các bạn nhé. Ở đây vì bài tập đơn giản nên ta chịu khó hard-code vậy :D. Chúng ta có nhiều cách khác nhau để tránh hard-code nhưng mình sẽ nói sau ở các bài khác.
Mình sẽ tạo file DAL_ThanhVien.cs (Class file)
Ở đây mình sẽ làm sẵn luôn 4 methods là: Lấy tất cả, Thêm, Xóa, Sửa nhé 😀
DAL_ThanhVien.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using DTO_QuanLy;
namespace DAL_QuanLy
{
public class DAL_ThanhVien : DBConnect
{
/// <summary>
/// Get toàn bộ thành viên
/// </summary>
/// <returns></returns>
public DataTable getThanhVien()
{
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM THANHVIEN", _conn);
DataTable dtThanhvien = new DataTable();
da.Fill(dtThanhvien);
return dtThanhvien;
}
/// <summary>
/// Thêm thành viên
/// </summary>
/// <param name="tv"></param>
/// <returns></returns>
public bool themThanhVien(DTO_ThanhVien tv)
{
try
{
// Ket noi
_conn.Open();
// Query string - vì mình để TV_ID là identity (giá trị tự tăng dần) nên ko cần fải insert ID
string SQL = string.Format("INSERT INTO THANHVIEN(TV_NAME, TV_PHONE, TV_EMAIL) VALUES ('{0}', '{1}', '{2}')", tv.THANHVIEN_NAME, tv.THANHVIEN_PHONE, tv.THANHVIEN_EMAIL);
// Command (mặc định command type = text nên chúng ta khỏi fải làm gì nhiều).
SqlCommand cmd = new SqlCommand(SQL, _conn);
// Query và kiểm tra
if (cmd.ExecuteNonQuery() > 0)
return true;
}
catch (Exception e)
{
}
finally
{
// Dong ket noi
_conn.Close();
}
return false;
}
/// <summary>
/// Sửa thành viên
/// </summary>
/// <param name="tv"></param>
/// <returns></returns>
public bool suaThanhVien(DTO_ThanhVien tv)
{
try
{
// Ket noi
_conn.Open();
// Query string
string SQL = string.Format("UPDATE THANHVIEN SET TV_NAME = '{0}', TV_PHONE = '{1}', TV_EMAIL = '{2}' WHERE TV_ID = {3}", tv.THANHVIEN_NAME, tv.THANHVIEN_PHONE, tv.THANHVIEN_EMAIL, tv.THANHVIEN_ID);
// Command (mặc định command type = text nên chúng ta khỏi fải làm gì nhiều).
SqlCommand cmd = new SqlCommand(SQL, _conn);
// Query và kiểm tra
if (cmd.ExecuteNonQuery() > 0)
return true;
}
catch (Exception e)
{
}
finally
{
// Dong ket noi
_conn.Close();
}
return false;
}
/// <summary>
/// Xóa thành viên
/// </summary>
/// <param name="tv"></param>
/// <returns></returns>
public bool xoaThanhVien(int TV_ID)
{
try
{
// Ket noi
_conn.Open();
// Query string - vì xóa chỉ cần ID nên chúng ta ko cần 1 DTO, ID là đủ
string SQL = string.Format("DELETE FROM THANHVIEN WHERE TV_ID = {0})", TV_ID);
// Command (mặc định command type = text nên chúng ta khỏi fải làm gì nhiều).
SqlCommand cmd = new SqlCommand(SQL, _conn);
// Query và kiểm tra
if (cmd.ExecuteNonQuery() > 0)
return true;
}
catch (Exception e)
{
}
finally
{
// Dong ket noi
_conn.Close();
}
return false;
}
}
}