Trong bài viết Lập trình thực thi thủ tục SQL trong ADO.NET – Phần 1 tôi đã trình bày về cách thực thi 1 thủ tục thông thường bên trong Code của Form sử dụng ADO.NET. Ở phần 2 này tôi sẽ trình bày cách các bạn thao tác với thủ tục SQL trong mô hình 3 lớp. Bạn sẽ thấy được việc thực thi thủ tục lúc này trở nên đơn giản và thuận tiện hơn rất nhiều.
Trong bài viết này, tôi lại quay trở lại ví dụ của Lập trình theo mô hình 3 của một bài viết trước. Bạn hãy tải về để tiện theo dõi.
Bước 1: Trong cơ sở dữ liệu BookShopDB, bạn hãy tạo 3 thủ tục thêm, xóa, sửa 1 cuốn sách như sau:
CREATE PROC SP_InsertBook ( @BookName nvarchar(250), @Author nvarchar(500), @Amount int, @Price int ) AS INSERT INTO Books VALUES(@BookName,@Author,@Amount,@Price);
CREATE PROC SP_UpdateBook ( @BookID int, @BookName nvarchar(250), @Author nvarchar(500), @Amount int, @Price int ) AS UPDATE Books SET BookName = @BookName, Author = @Author, Amount= @Amount, Price =@Price WHERE BookID= @BookID;
CREATE PROC SP_DeleteBook ( @BookID int ) AS DELETE Books WHERE BookID= @BookID;
Bước 2: Trong lớp DataAccessHelper bạn viết một phương thức dùng chung để chạy 1 thủ tục dạng thêm, sửa, xóa như sau:
public
int
ExecuteStoredProcedure(
string
spName,
string
[] pNames,
object
[] pValues)
{
Open();
// Khai báo và khởi tạo đối tượng Command với tham số tên thủ tục spName
cmd =
new
SqlCommand(spName, conn);
// Khai báo kiểu thủ tục
cmd.CommandType = CommandType.StoredProcedure;
// Khai báo tham số SqlParameter
SqlParameter p;
// Khởi tạo danh sách các tham số với giá trị tương ứng
for
(
int
i = 0; i < pNames.Length; i++)
{
p =
new
SqlParameter(pNames[i], pValues[i]);
cmd.Parameters.Add(p);
}
return
cmd.ExecuteNonQuery();
}
Bước 3: Viết code sử dụng thủ tục trong lớp BookDAL
// Thực thi bằng thủ tục
public
bool
InsertBook(Book bk)
{
string
spName =
"SP_InsertBook"
;
// Tên thủ tục
// Tên các tham số trong thủ tục
string
[] pNames = {
"@BookName"
,
"@Author"
,
"@Amount"
,
"@Price"
};
// Giá trị tương ứng muốn gán cho từng tham số trên
object
[] pValues = {bk.BookName,bk.Author,bk.Amount,bk.Price };
int
count = db.ExecuteStoredProcedure(spName, pNames, pValues);
return
count > 0;
}
public
bool
UpdateBook(Book bk)
{
string
spName =
"SP_UpdateBook"
;
string
[] pNames = {
"@BookID"
,
"@BookName"
,
"@Author"
,
"@Amount"
,
"@Price"
};
object
[] pValues = {bk.BookID, bk.BookName, bk.Author, bk.Amount, bk.Price };
int
count = db.ExecuteStoredProcedure(spName, pNames, pValues);
return
count > 0;
}
public
bool
DeleteBook(Book bk)
{
string
spName =
"SP_DeleteBook"
;
string
[] pNames = {
"@BookID"
};
object
[] pValues = { bk.BookID };
int
count = db.ExecuteStoredProcedure(spName, pNames, pValues);
return
count > 0;
}
Bước 4: Gọi các phương thức thực thi thủ tục của BookDAL trong lớp BookBLL
// Thực thi gọi phương thức có sử dụng thủ tục
public
bool
InsertBook(Book bk)
{
return
dal.InsertBook(bk);
}
public
bool
UpdateBook(Book bk)
{
return
dal.UpdateBook(bk);
}
public
bool
DeleteBook(Book bk)
{
return
dal.DeleteBook(bk);
}
Bước 5: Gọi các phương thức của BookBLL trong Form frmBooks và frmUpdateBook.
Gọi phương thức DeleteBook trong sự kiện Click của nút btnDelete trên form frmBook
Gọi các phương thức InsertBook và UpdateBook trong sự kiện Click của nút btnSave trên form frmUpdateBook
Việc gọi như thế nào các bạn xem chi tiết trong Ví dụ Demo.
Bước 6: Chạy chương trình và thử nghiệm.
Download Demo thực thi thủ tục với ADO.NET & Mô hình 3 lớp
Chúc bạn thành công!
Bình luận (0)
Add Comment