MỤC LỤC Chƣơng 1. PHÂN TÍCH THIẾT KẾ DATABASE ........................................................... 6 1.1. YÊU CẦU HỆ THỐNG .............................................................................................. 6 1.2. THIẾT KẾ DATABASE ............................................................................................. 6 1.2.1. Diagram ................................................................................................................... 6 1.2.2. Bảng chủ đề: tbChuDe ............................................................................................. 6 1.2.3. Bảng nhà xuất bản: tbNhaXuatBan ......................................................................... 6 1.2.4. Bảng sách: tbSach .................................................................................................... 7 1.2.5. Bảng tác giả: tbTacGia ............................................................................................ 7 1.2.6. Bảng khách hàng: tbKhachHang ............................................................................. 7 1.2.7. Bảng đơn đặt hàng: tbDonHang .............................................................................. 7 1.2.8. Bảng chi tiết đặt hàng: tbCTDonHang .................................................................... 8 1.2.9. Bảng chi tiết đặt hàng: tbNhanVien ........................................................................ 8 1.3. STORE PROCEDURE ............................................................................................... 8 1.3.1. Xây dựng Store Procedure Insert ............................................................................. 8 1.3.2. Xây dựng Store Procedure Update .......................................................................... 9 1.3.3. Xây dựng Store Procedure Delete ......................................................................... 10 1.3.4. Xây dựng Store Procedure GET ............................................................................ 11 1.4. MỘT SỐ ĐỒ ÁN ...................................................................................................... 13 Chƣơng 2. XÂY DỰNG MÔ HÌNH 3 LAYER ............................................................... 14 2.1. TẠO MÔ HÌNH PROJECT ...................................................................................... 14 2.1.1. Tạo Solution .......................................................................................................... 14 2.1.2. Tạo Project Data Object Transfer .......................................................................... 15 2.1.3. Tạo Project Data Access Layer ............................................................................. 16 2.1.4. Tạo Project Busineess ............................................................................................ 17 2.1.5. Tạo Website ........................................................................................................... 17 2.1.6. Tạo File Web.Config cho Web Site ....................................................................... 18 2.1.7. Tạo Reference ........................................................................................................ 19 2.2. XÂY DỰNG ĐỐI TƢỢNG DATA TRANSFER..................................................... 22 2.2.1. Xây dựng class Entities ......................................................................................... 22 2.2.2. Tip: Cách xây dựng nhanh đối tƣợng Data Access Transfer ................................ 25 2.2.3. Xây dựng enum Columns ...................................................................................... 27 2.2.4. Xây dựng lớp Collection ....................................................................................... 28 P a g e | 3 2.3. XÂY DỰNG LỚP DATA ACCESS ......................................................................... 28 2.3.1. Thuộc Tính SqlConnection .................................................................................... 28 2.3.2. Phƣơng thức khởi tạo............................................................................................. 28 2.3.3. Phƣơng thức Insert................................................................................................. 29 2.3.4. Phƣơng thức Update .............................................................................................. 30 2.3.5. Phƣơng thức Delete ............................................................................................... 30 2.3.6. Phƣơng thức Get .................................................................................................... 31 2.4. XÂY DỰNG LỚP BUSINESS ................................................................................. 33 2.4.1. Phƣơng thức Insert................................................................................................. 33 2.4.2. Phƣơng thức Update .............................................................................................. 33 2.4.3. Phƣơng thức Delete ............................................................................................... 34 2.4.4. Phƣơng thức Get .................................................................................................... 34 2.4.5. Phƣơng thức GetAll ............................................................................................... 34 2.4.6. Phƣơng thức GetByID ........................................................................................... 35 Chƣơng 3. XÂY DỰNG PHÂN HỆ QUẢN LÝ ............................................................. 36 3.1. TẠO TRANG MASTER PAGE ............................................................................... 36 3.1.1. Tạo trang Master Page ........................................................................................... 36 3.1.2. Thiết kế giao diện cho trang Master Page ............................................................. 37 3.1.3. Kiểm tra đăng nhập ................................................................................................ 37 3.2. XÂY DỰNG CHỨC NĂNG ĐĂNG NHẬP ............................................................ 38 3.2.1. Thiết kế giao diện cho trang đăng nhập ................................................................. 38 3.2.2. Xử lý đăng nhập .................................................................................................... 39 3.3. XÂY DỰNG CHỨC NĂNG XEM DANH SÁCH SẢN PHẨM ............................. 40 3.3.1. Tạo trang danh sách sản phẩm ............................................................................... 40 3.3.2. Thiết kế giao diện .................................................................................................. 41 3.3.3. Xử lý Page Load .................................................................................................... 44 3.3.4. Xử lý chức năng phân trang ................................................................................... 47 3.3.5. Chức năng xóa ....................................................................................................... 48 3.3.6. Chức năng tìm kiếm .............................................................................................. 48 3.4. XÂY DỰNG CHỨC NĂNG THÊM SẢN PHẨM ................................................... 48 3.4.1. Thiết kế giao diện cho trang thêm sản phẩm ......................................................... 48 3.4.2. Xử lý tải dữ liệu ..................................................................................................... 50 3.4.3. Xử lý thêm sản phẩm ............................................................................................. 51 P a g e | 4 3.5. XÂY DỰNG CHỨC NĂNG CHỈNH SỬA SẢN PHẨM ........................................ 52 3.5.1. Thiết kế giao diện cho trang chỉnh sửa sản phẩm .................................................. 52 3.5.2. Xử lý Page Load .................................................................................................... 55 3.5.3. Xử lý chỉnh sửa sản phẩm ..................................................................................... 56 3.6. XÂY DỰNG CHỨC NĂNG XEM DANH SÁCH ĐƠN HÀNG ............................ 57 3.6.1. Thiết kế giao diện .................................................................................................. 57 3.6.2. Xử lý tải dữ liệu ..................................................................................................... 59 3.6.3. Xử lý phân trang .................................................................................................... 61 3.7. XÂY DỰNG CHỨC NĂNG XEM CHI TIẾT ĐƠN HÀNG ................................... 61 3.7.1. Thiết kế giao diện .................................................................................................. 61 3.7.2. Xử lý tải dữ liệu ..................................................................................................... 65 3.7.3. Xử lý phân trang .................................................................................................... 67 Chƣơng 4. XÂY DỰNG PHÂN HỆ NGƢỜI DÙNG...................................................... 68 4.1.1. TẠO TRANG MASTER PAGE............................................................................ 68 4.1.2. Thiết kế giao diện .................................................................................................. 68 4.1.3. Xử lý tải dữ liệu ..................................................................................................... 72 4.1.4. Xử lý thoát khỏi hệ thống ...................................................................................... 73 4.2. XÂY DỰNG TRANG CHỦ ..................................................................................... 73 4.2.1. Thiết kế giao diện .................................................................................................. 73 4.2.2. Xử lý tải dữ liệu ..................................................................................................... 74 4.3. XÂY DỰNG TRANG DANH SÁCH SẢN PHẨM THEO CHỦ ĐỀ ..................... 75 4.3.1. Thiết kế giao diện .................................................................................................. 75 4.3.2. Xử lý tải dữ liệu ..................................................................................................... 76 4.3.3. Phân trang .............................................................................................................. 77 4.4. XÂY DỰNG TRANG CHI TIẾT SẢN PHẨM........................................................ 78 4.4.1. Thiết kế giao diện .................................................................................................. 78 4.4.2. Xử lý tải dữ liệu ..................................................................................................... 81 4.4.3. Xử lý thêm vào giỏ hàng ....................................................................................... 82 4.5. XÂY DỰNG CHỨC NĂNG ĐĂNG KÝ ................................................................. 82 4.5.1. Thiết kế giao diện .................................................................................................. 82 4.5.2. Xử lý đăng ký ........................................................................................................ 84 4.6. XÂY DỰNG CHỨC NĂNG ĐĂNG NHẬP ............................................................ 85 4.6.1. Thiết kế giao diện .................................................................................................. 85 P a g e | 5 4.6.2. Xử lý đăng nhập .................................................................................................... 86 4.7. XÂY DỰNG CHỨC NĂNG GIỎ HÀNG ................................................................ 86 4.7.1. Xây dựng giỏ hàng ................................................................................................ 86 4.7.2. Thiết kế giao diện .................................................................................................. 88 4.7.3. Xử lý tải dữ liệu ..................................................................................................... 90 4.8. XÂY DỰNG CHỨC NĂNG ĐẶT HÀNG ............................................................... 91 4.8.1. Thiết kế giao diện .................................................................................................. 91 4.8.2. Xử lý chức năng đặt hàng ...................................................................................... 92
Trang 1Khoa Công Nghệ Thông Tin
CÔNG NGHỆ WEB NÂNG CAO XÂY DỰNG WEB SITES VỚI ASP.NET 2.0
Hồ Chí Minh, 7/2011
Trang 2MỤC LỤC
Chương 1 PHÂN TÍCH THIẾT KẾ DATABASE 6
1.1 YÊU CẦU HỆ THỐNG 6
1.2 THIẾT KẾ DATABASE 6
1.2.1 Diagram 6
1.2.2 Bảng chủ đề: tbChuDe 6
1.2.3 Bảng nhà xuất bản: tbNhaXuatBan 6
1.2.4 Bảng sách: tbSach 7
1.2.5 Bảng tác giả: tbTacGia 7
1.2.6 Bảng khách hàng: tbKhachHang 7
1.2.7 Bảng đơn đặt hàng: tbDonHang 7
1.2.8 Bảng chi tiết đặt hàng: tbCTDonHang 8
1.2.9 Bảng chi tiết đặt hàng: tbNhanVien 8
1.3 STORE PROCEDURE 8
1.3.1 Xây dựng Store Procedure Insert 8
1.3.2 Xây dựng Store Procedure Update 9
1.3.3 Xây dựng Store Procedure Delete 10
1.3.4 Xây dựng Store Procedure GET 11
1.4 MỘT SỐ ĐỒ ÁN 13
Chương 2 XÂY DỰNG MÔ HÌNH 3 LAYER 14
2.1 TẠO MÔ HÌNH PROJECT 14
2.1.1 Tạo Solution 14
2.1.2 Tạo Project Data Object Transfer 15
2.1.3 Tạo Project Data Access Layer 16
2.1.4 Tạo Project Busineess 17
2.1.5 Tạo Website 17
2.1.6 Tạo File Web.Config cho Web Site 18
2.1.7 Tạo Reference 19
2.2 XÂY DỰNG ĐỐI TƯỢNG DATA TRANSFER 22
2.2.1 Xây dựng class Entities 22
2.2.2 Tip: Cách xây dựng nhanh đối tượng Data Access Transfer 25
2.2.3 Xây dựng enum Columns 27
2.2.4 Xây dựng lớp Collection 28
Trang 32.3 XÂY DỰNG LỚP DATA ACCESS 28
2.3.1 Thuộc Tính SqlConnection 28
2.3.2 Phương thức khởi tạo 28
2.3.3 Phương thức Insert 29
2.3.4 Phương thức Update 30
2.3.5 Phương thức Delete 30
2.3.6 Phương thức Get 31
2.4 XÂY DỰNG LỚP BUSINESS 33
2.4.1 Phương thức Insert 33
2.4.2 Phương thức Update 33
2.4.3 Phương thức Delete 34
2.4.4 Phương thức Get 34
2.4.5 Phương thức GetAll 34
2.4.6 Phương thức GetByID 35
Chương 3 XÂY DỰNG PHÂN HỆ QUẢN LÝ 36
3.1 TẠO TRANG MASTER PAGE 36
3.1.1 Tạo trang Master Page 36
3.1.2 Thiết kế giao diện cho trang Master Page 37
3.1.3 Kiểm tra đăng nhập 37
3.2 XÂY DỰNG CHỨC NĂNG ĐĂNG NHẬP 38
3.2.1 Thiết kế giao diện cho trang đăng nhập 38
3.2.2 Xử lý đăng nhập 39
3.3 XÂY DỰNG CHỨC NĂNG XEM DANH SÁCH SẢN PHẨM 40
3.3.1 Tạo trang danh sách sản phẩm 40
3.3.2 Thiết kế giao diện 41
3.3.3 Xử lý Page Load 44
3.3.4 Xử lý chức năng phân trang 47
3.3.5 Chức năng xóa 48
3.3.6 Chức năng tìm kiếm 48
3.4 XÂY DỰNG CHỨC NĂNG THÊM SẢN PHẨM 48
3.4.1 Thiết kế giao diện cho trang thêm sản phẩm 48
3.4.2 Xử lý tải dữ liệu 50
3.4.3 Xử lý thêm sản phẩm 51
Trang 43.5 XÂY DỰNG CHỨC NĂNG CHỈNH SỬA SẢN PHẨM 52
3.5.1 Thiết kế giao diện cho trang chỉnh sửa sản phẩm 52
3.5.2 Xử lý Page Load 55
3.5.3 Xử lý chỉnh sửa sản phẩm 56
3.6 XÂY DỰNG CHỨC NĂNG XEM DANH SÁCH ĐƠN HÀNG 57
3.6.1 Thiết kế giao diện 57
3.6.2 Xử lý tải dữ liệu 59
3.6.3 Xử lý phân trang 61
3.7 XÂY DỰNG CHỨC NĂNG XEM CHI TIẾT ĐƠN HÀNG 61
3.7.1 Thiết kế giao diện 61
3.7.2 Xử lý tải dữ liệu 65
3.7.3 Xử lý phân trang 67
Chương 4 XÂY DỰNG PHÂN HỆ NGƯỜI DÙNG 68
4.1.1 TẠO TRANG MASTER PAGE 68
4.1.2 Thiết kế giao diện 68
4.1.3 Xử lý tải dữ liệu 72
4.1.4 Xử lý thoát khỏi hệ thống 73
4.2 XÂY DỰNG TRANG CHỦ 73
4.2.1 Thiết kế giao diện 73
4.2.2 Xử lý tải dữ liệu 74
4.3 XÂY DỰNG TRANG DANH SÁCH SẢN PHẨM THEO CHỦ ĐỀ 75
4.3.1 Thiết kế giao diện 75
4.3.2 Xử lý tải dữ liệu 76
4.3.3 Phân trang 77
4.4 XÂY DỰNG TRANG CHI TIẾT SẢN PHẨM 78
4.4.1 Thiết kế giao diện 78
4.4.2 Xử lý tải dữ liệu 81
4.4.3 Xử lý thêm vào giỏ hàng 82
4.5 XÂY DỰNG CHỨC NĂNG ĐĂNG KÝ 82
4.5.1 Thiết kế giao diện 82
4.5.2 Xử lý đăng ký 84
4.6 XÂY DỰNG CHỨC NĂNG ĐĂNG NHẬP 85
4.6.1 Thiết kế giao diện 85
Trang 54.6.2 Xử lý đăng nhập 86
4.7 XÂY DỰNG CHỨC NĂNG GIỎ HÀNG 86
4.7.1 Xây dựng giỏ hàng 86
4.7.2 Thiết kế giao diện 88
4.7.3 Xử lý tải dữ liệu 90
4.8 XÂY DỰNG CHỨC NĂNG ĐẶT HÀNG 91
4.8.1 Thiết kế giao diện 91
4.8.2 Xử lý chức năng đặt hàng 92
Trang 6Chương 1 PHÂN TÍCH THIẾT KẾ DATABASE
1.1 YÊU CẦU HỆ THỐNG
1.2 THIẾT KẾ DATABASE
1.2.1 Diagram
1.2.2 Bảng chủ đề: tbChuDe
TenChuDe nVarchar(255) Not Null
1.2.3 Bảng nhà xuất bản: tbNhaXuatBan
DiaChi nVarchar(255)
DienThoai nVarchar(15)
Trang 71.2.4 Bảng sách: tbSach
TenSach nVarchar(255) Not Null
DiaChi nVarchar(255)
DienThoai nVarchar(255)
1.2.6 Bảng khách hàng: tbKhachHang
Trang 81.2.8 Bảng chi tiết đặt hàng: tbCTDonHang
MaCTDonHang Int (Autonumber)
1.2.9 Bảng chi tiết đặt hàng: tbNhanVien
MaCTDonHang Int (Autonumber)
1.3.1 Xây dựng Store Procedure Insert
Để thêm dữ liệu vào bảng tbSach chúng ta cần khai báo các tham số @TenSach,
@DonGia, @MoTa, @HinhMinhHoa, @MaCD, @MaNXB, @NgayCapNhat,
@SoLuongBan, @SoLanXem, @MaTG cho Store Procedure mang tên
sp_tbSach_Insert Chúng ta không cần nhận vào nội dung của trường MaSach vì đã thiết lập thuộc tính tự tăng cho trường MaSach
Trang 9Sau khi nhận được các tham số, Store Procedure tiến hành câu lệnh INSERT các dữ
liệu đã nhận được vào cơ sở dữ liệu
Sau đây là nội dung của Store Procedure Insert của table tbSach
ALTER PROCEDURE dbo.sp_tbSach_Insert
1.3.2 Xây dựng Store Procedure Update
Ngoài những tham số nhận vào giá trị của trường cần thay đổi @TenSach,
@DonGia, @MoTa, @HinhMinhHoa, @MaCD, @MaNXB, @NgayCapNhat,
@SoLuongBan, @SoLanXem, @MaTG, chúng ta cần phải truyền vào @MaSach để xác định thay đổi sản phẩm nào trong cơ sở dữ liệu
Store Procedure Update tiến hành cập nhật các thay đổi bằng câu lệnh UPDATE Sau đây là nội dung của Store Procedure Update
Trang 10CREATE PROCEDURE dbo.sp_tbSach_Update
WHERE @MaSach = @MaSach
1.3.3 Xây dựng Store Procedure Delete
Để xóa một sản phẩm từ bảng tbSach, Store Procedure Delete cần khai báo tham
số @MaSach để truyền vào khóa chính của sản phẩm cần xóa
Sau khi nhận đƣợc khóa chính của sản phẩm cần xóa thì Store Procedure Delete tiến
hành kiểm tra đối tƣợng sách cần xóa đã đƣợc sử dụng ở các bảng có khóa ngoại đến tbSach Nếu chƣa đƣợc sử dụng thì Store Procedure sẽ tiến hành xóa đối tƣợng cần xóa Ngƣợc lại Store Procedure sẽ không xóa đối tƣợng đó Sau đây là nội dung của Store
Procedure Delete
ALTER PROCEDURE dbo.sp_tbSach_Delete
Trang 11@MaSach INT
AS
DECLARE @TOTAL INT
SELECT @TOTAL = COUNT (*) FROM tbCTDonHang
WHERE MaSach = @MaSach
Hai tham số @PageIndex (trang hiện tại) và @PageSize (số dòng /trang) dùng để phân trang cho Store Procedure GET
Để lấy dữ liệu đã được sắp xếp, chúng ta cần khai báo 2 tham số là @OrderBy và
@OrderDirection lần lượt quy định sắp sếp theo cột nào và sắp xếp theo thứ tự tăng hay
giảm dần
Tham số @TotalRecords không phải là tham số INPUT mà là tham số OUTPUT
Tham số này sẽ truyền lại cho chương trình biết là có bao nhiêu sản phẩm thỏa điều kiện
@Where truyền vào
Sau khi nhận được đầy đủ các tham số kể trên, Store Procedure tiến hành tạo bảng
tạm mang tên #Temp(IDTemp, MaSach) Trường IDTemp có kiểu dữ liệu là INT tự tăng khi INSERT, và là khóa chính của bảng #Temp Trường IDTemp còn được tạo ra để phục vụ mục đích phân trang, vì các giá trị của chúng là liên tiếp nhau Trường MaSach của bảng #Temp dùng để lưu MaSach của tất cả các sản phẩm thỏa điều kiện @Where
Chương trình thành lập câu lệnh @sql tìm kiếm tất các sản phẩm thỏa điều kiện
@Where, sắp sếp theo cột @OrderBy và theo thứ tự @OrderDirection Lấy trường MaSach
Trang 12của tất cả các sản phẩm thỏa điều kiện đó, insert vào bảng #Temp Lúc này trong bảng #Temp chúng ta có được MaSach của tất cả các sản phẩm thỏa điều kiện và được sắp sếp theo các tham số truyền vào, đồng thời cũng có được cột IDTemp chứa các giá trị liên tiếp nhau
Vì bảng #Temp chưa tất cả MaSach của các sản phẩm thỏa điều kiện @Where nên muốn có được tham số @TotalRecord chúng ta chỉ cần đếm số dòng của bảng #Temp
Chương trình sẽ lấy những thông tin cần thiết từ bảng #Temp JOIN với bảng tbSach với điều kiện JOIN là #Temp.MaSach = tbProduct.Masach Nếu @PageIndex truyền vào là
0 thì chương trình sẽ lấy tất cả sản phẩm có trong bảng #Temp Ngược lại, nếu @PageIndex
khác 0 thì chương trình sẽ tiến hành phân trang
Cuối cùng chúng ta xóa bảng #Temp Sau đây là nội dung của Store Procedure
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
CREATE TABLE #Temp (
IDTemp INT IDENTITY (1,1),
MaSach INT
)
DECLARE @sql NVARCHAR (1000)
SET @sql = 'INSERT INTO #temp ([MaSach]) SELECT [MaSach] FROM
tbSach ' + @Where + ' ORDER BY ' + @OrderBy + ' ' + @OrderDirection
Trang 13(T.IDTemp > (@PageIndex - 1) * @PageSize AND
T.IDTemp <= @PageIndex * @PageSize)
DROP TABLE #temp
1.4 MỘT SỐ ĐỒ ÁN
Trang 14Chương 2 XÂY DỰNG MÔ HÌNH 3 LAYER
2.1 TẠO MÔ HÌNH PROJECT
2.1.1 Tạo Solution
Khởi động chương trình Visual Studio 2005
New Project Other Project Type Visual Studio Solutions Blank Solution
Nhập tên và chọn đường dẫn cho solution, sau đó nhấn vào nút “OK”
Trang 152.1.2 Tạo Project Data Object Transfer
Từ cửa sổ Solution Explorer, nhấp chuột phải vào Solution Add New Project
Trong khung Add New Project, chọn loại project là Class Library, đặt tên cho project là Entities, chọn đường dẫn và nhấn vào nút ”OK”
Trang 162.1.3 Tạo Project Data Access Layer
Lặp lại các bước như tạo project Entities Đặt tên cho project này là DAL
Trang 172.1.4 Tạo Project Busineess
Lặp lại các bước như tạo project Entities Đặt tên cho project này là BUS
2.1.5 Tạo Website
Từ cửa số Solution Explorer, nhấp chuột phải vào solution Add New Web Site
Trang 18Trong khung Add New Web Site, chọn loại Web Site là ASP.NET Web Site, thƣ mục để chứa Web Site và ngôn ngữ là Visual C# Sau đó nhấn nút “OK”
2.1.6 Tạo File Web.Config cho Web Site
Từ cửa sổ Solution Explorer, chọn chuột phải vào Project Web Site Add New Item…
Trong khung Add New Item, chọn loại file là Web Configuration File và nhấn vào nút “Add”
Trang 19Chúng ta thêm chuỗi kết nối cơ sở dữ liệu vào file Web.config vừa tạo ra
< connectionStrings >
< add name = strConnection " connectionString = " Data
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;I ntegrated Security=True;User Instance=True " />
</ connectionStrings >
2.1.7 Tạo Reference
2.1.7.1 Reference của DAL
Lớp Data Access Layer bắt buộc phải thêm reference tới đối tƣợng Data Objects Transfer
Từ cửa sổ Solution Explorer, nhấp chuột phải vào thƣ mục Reference của project DAL Add Reference
Trang 20Trong khung Add Reference, chọn tab Project, chọn Project Data Object Transfer, sau đó nhấn vào nút “OK”
2.1.7.2 Reference của BUS
Lớp Business bắt buộc phải thêm reference tới đối tƣợng Data Objects Transfer và Data Access Layer
Từ cửa sổ Solution Explorer, nhấp chuột phải vào thƣ mục Reference của project BUS Add Reference
Trang 21Trong khung Add Reference, chọn tab Project, chọn Project Data Object Transfer
và project Data Access Layer sau đó nhấn vào nút “OK”
2.1.7.3 Reference của Web Site
Lớp Presentation (Web Site) bắt buộc phải thêm reference tới đối tƣợng Business Layer, Data Objects Transfer và Data Access Layer
Từ cửa sổ Solution Explorer, nhấp chuột phải vào Web Site Add Reference
Trang 22Trong khung Add Reference, chọn tab Project, chọn project Business Layer, project Data Object Transfer và project Data Access Layer sau đó nhấn vào nút “OK”
2.2 XÂY DỰNG ĐỐI TƢỢNG DATA TRANSFER
2.2.1 Xây dựng class Entities
Để đóng gói các thuộc tính của tbProduct, chúng ta khai báo class tbProduct nhƣ
sau:
Trang 23public class tbSach
{
}
Sau đó, chúng ta khai báo các thuộc tính của Product và tạo các phương thức get và
set cho thuộc tính đó
public class tbSach
{
private int maSach;
public int MaSach
{
get { return maSach; }
set { maSach = value ; }
}
private string tenSach;
public string TenSach
{
get { return tenSach; }
set { tenSach = value ; }
}
private int donGia;
public int DonGia
{
get { return donGia; }
set { donGia = value ; }
}
private string moTa;
public string MoTa
{
get { return moTa; }
set { moTa = value ; }
}
private string hinhMinhHoa;
public string HinhMinhHoa
{
get { return hinhMinhHoa; }
set { hinhMinhHoa = value ; }
Trang 24}
private int maCD;
public int MaCD
{
get { return maCD; }
set { maCD = value ; }
}
private int maNXB;
public int MaNXB
{
get { return maNXB; }
set { maNXB = value ; }
}
private DateTime ngayCapNhat;
public DateTime NgayCapNhat
{
get { return ngayCapNhat; }
set { ngayCapNhat = value ; }
}
private int soLuongBan;
public int SoLuongBan
{
get { return soLuongBan; }
set { soLuongBan = value ; }
}
private int soLanXem;
public int SoLanXem
{
get { return soLanXem; }
set { soLanXem = value ; }
}
private int maTG;
public int MaTG
{
get { return maTG; }
set { maTG = value ; }
}
Trang 25private int maSach;
Bôi đen từ maSach, nhấn chuột phải Refactor Encapsulate Field Trong khung Encapsulate Field, lựa chọn các thông số mặc định Sau đó nhấn chọn vào nút “OK”
Trong khung Review Reference Changes - Encapsulate Field, nhấn chọn vào nút
“Apply”
Trang 26Kết quả thu đƣợc:
private int maSach;
public int MaSach
{
get { return maSach; }
set { maSach = value ; }
}
Trang 272.2.3 Xây dựng enum Columns
Để ghi nhớ các cột của bảng tbSach, chúng ta khai báo enum tbSachColumns Trong enum này có tên chính xác của các cột trong bảng tbSach
public enum tbSachColumns
Trang 28Sau khi khai báo class tbSachColumns, chúng ta không cần phải vào cơ sở dữ liệu
để xem tên các cột trong bảng tbSach nữa, mà chỉ cần sử dụng enum tbSachColumns
2.2.4 Xây dựng lớp Collection
Để biểu diễn cho một danh sách tbSach chúng ta khai báo class tbSachCollection kế thừa của List<tbSach> như sau:
public class tbSachCollection : List < tbSach >{}
Khi cần biểu diễn một danh sách, chúng ta sử dụng class tbSachCollection mà không cần phải dùng thông qua List hoặc ArrayList nữa
2.3 XÂY DỰNG LỚP DATA ACCESS
2.3.1 Thuộc Tính SqlConnection
Để thao tác với Cơ Sở Dữ Liệu chúng ta cần phải khai báo đối tượng SqlConnection
private SqlConnection cn = null ;
2.3.2 Phương thức khởi tạo
Sau khi khai báo đối tượng SqlConnection, chúng ta cần khởi tạo đối tượng này và
sử dụng phương thức open() để bật kết nối với CSDL
Trang 29đã khởi tạo ở hàm khởi tạo đối tượng Data Access Layer
Sau khi khởi tạo đối tượng SqlCommand, chúng ta cần truyền các tham số vào cho Store Proceduce và gọi phương thức ExecuteNonQuery() để thực thi Store Procedure:
cm.Parameters.AddWithValue( "@TenSach" , sach.TenSach);
cm.Parameters.AddWithValue( "@DonGia" , sach.DonGia);
cm.Parameters.AddWithValue( "@MoTa" , sach.MoTa);
cm.Parameters.AddWithValue( "@HinhMinhHoa" ,
cm.Parameters.AddWithValue( "@MaCD" , sach.MaCD);
cm.Parameters.AddWithValue( "@MaNXB" , sach.MaNXB);
cm.Parameters.AddWithValue( "@NgayCapNhat" ,
sach.NgayCapNhat);
cm.Parameters.AddWithValue( "@SoLuongBan" ,
sach.SoLuongBan);
cm.Parameters.AddWithValue( "@SoLanXem" , sach.SoLanXem);
cm.Parameters.AddWithValue( "@MaTG" , sach.MaTG);
cm.ExecuteNonQuery();
Trang 30đã khởi tạo ở hàm khởi tạo đối tượng Data Access Layer
Sau khi khởi tạo đối tượng SqlCommand, chúng ta cần truyền các tham số vào cho Store Proceduce và gọi phương thức ExecuteNonQuery() để thực thi Store Procedure:
cm.Parameters.AddWithValue( "@MaSach" , sach.MaSach);
cm.Parameters.AddWithValue( "@TenSach" , sach.TenSach);
cm.Parameters.AddWithValue( "@DonGia" , sach.DonGia);
cm.Parameters.AddWithValue( "@MoTa" , sach.MoTa);
cm.Parameters.AddWithValue( "@HinhMinhHoa" ,
sach.HinhMinhHoa);
cm.Parameters.AddWithValue( "@MaCD" , sach.MaCD);
cm.Parameters.AddWithValue( "@MaNXB" , sach.MaNXB);
cm.Parameters.AddWithValue( "@NgayCapNhat" ,
sach.NgayCapNhat);
cm.Parameters.AddWithValue( "@SoLuongBan" ,
sach.SoLuongBan);
cm.Parameters.AddWithValue( "@SoLanXem" , sach.SoLanXem);
cm.Parameters.AddWithValue( "@MaTG" , sach.MaTG);
cm.ExecuteNonQuery();
}
2.3.5 Phương thức Delete
Phương thức Delete dùng để xóa đối tượng tbSach trong Cơ Sở Dữ Liệu Phương
thức này nhận vào ID của Sach cần xóa
Trang 31Chúng ta khai báo đối tượng SqlCommand và khởi tạo đối tượng đó với hai tham số là: tên của Store Proceduce: sp_tbSach_Delete và đối tượng SqlConnection mà chúng ta
đã khởi tạo ở hàm khởi tạo đối tượng Data Access Layer
Sau khi khởi tạo đối tượng SqlCommand, chúng ta cần truyền ID cần xóa vào cho Store Proceduce và gọi phương thức ExecuteNonQuery() để thực thi Store Procedure:
Phương thức Get dùng để lấy những đối tượng tbSach từ Cơ Sở Dữ Liệu thỏa mãn
các điều kiện truyền vào Phương thức này nhận vào: Where, PageIndex, PageSize, OrderBy, OrderDirection, trả về danh sách các tbSach và TotalRecords
Chúng ta khai báo đối tượng SqlCommand và khởi tạo đối tượng đó với hai tham số là: tên của Store Proceduce: sp_tbSach_GET và đối tượng SqlConnection mà chúng ta đã khởi tạo ở hàm khởi tạo đối tượng Data Access Layer
Sau khi khởi tạo đối tượng SqlCommand, chúng ta cần truyền các tham số vào cho Store Proceduce
Chúng ta khai báo và khởi tạo đối tượng SqlDataReader từ đối tượng
SqlCommand Đọc từng dòng dữ liệu, chuyển đổi thành đối tượng tbSach và thêm đối tượng này vào danh sách sản phẩm được khai báo thông qua đối tượng tbProductCollection
Chúng ta nhận giá trị TotalRecords bằng cách parse giá trị của tham số
TotalRecords về giá trị int
public tbSachCollection Get( string where, int pageIndex,
int pageSize, string orderBy,
string orderDirection, out int totalRecords)
Trang 32{
SqlCommand cm = new SqlCommand ( "sp_tbSach_GET" , cn);
cm.CommandType = CommandType StoredProcedure;
cm.Parameters.AddWithValue( "@Where" , where);
cm.Parameters.AddWithValue( "@PageIndex" , pageIndex);
cm.Parameters.AddWithValue( "@PageSize" , pageSize);
cm.Parameters.AddWithValue( "@OrderBy" , orderBy);
tbSach sach = new tbSach ();
sach.MaTG = int Parse(dr.GetValue(0).ToString());
sach.TenSach = dr.GetValue(1).ToString();
sach.DonGia = int Parse( dr.GetValue(2).ToString()); sach.MoTa = dr.GetValue(3).ToString();
sach.HinhMinhHoa = dr.GetValue(4).ToString();
sach.MaCD = int Parse( dr.GetValue(5).ToString());
sach.MaNXB = int Parse( dr.GetValue(6).ToString());
int Parse( dr.GetValue(9).ToString());
sach.MaTG = int Parse(dr.GetValue(10).ToString());
Trang 33cm.Parameters[ "@TotalRecords" ].Value.ToString());
return sachCollection;
}
2.4 XÂY DỰNG LỚP BUSINESS
2.4.1 Phương thức Insert
Phương thức Insert được khai báo là phương thức static Do đó chúng ta không
cần phải khởi tạo đối tượng Bussiness để gọi phương thức Insert
Nếu có các quy định nghiệp vụ, chúng ta cần kiểm tra dữ liệu trước khi Insert vào
cơ sở dữ liệu Trong ví dụ này chúng ta không có các quy định nghiệp vụ nên không cần kiểm tra
Khai báo và khởi tạo đối tượng tbSachDAL, sau đó gọi phương thức Insert để thêm đối tượng tbSach vào cơ sở dữ liệu
public static void Insert( tbSach sach)
Phương thức Update được khai báo là phương thức static Do đó chúng ta không
cần phải khởi tạo đối tượng Bussiness để gọi phương thức Update
Nếu có các quy định nghiệp vụ, chúng ta cần kiểm tra dữ liệu trước khi Update đối
tượng tbProduct trong cơ sở dữ liệu Trong ví dụ này chúng ta không có các quy định nghiệp
vụ nên không cần kiểm tra
Khai báo và khởi tạo đối tượng tbSachDAL, sau đó gọi phương thức Update để sửa đối tượng tbSach trong cơ sở dữ liệu
public static void Update( tbSach sach)
{
tbSachDAL sachDAL = new tbSachDAL ();
sachDAL.Update(sach);
}
Trang 342.4.3 Phương thức Delete
Phương thức Delete được khai báo là phương thức static Do đó chúng ta không
cần phải khởi tạo đối tượng Bussiness để gọi phương thức Delete
Nếu có các quy định nghiệp vụ, chúng ta cần kiểm tra dữ liệu trước khi Delete đối
tượng tbSach trong cơ sở dữ liệu Trong ví dụ này chúng ta không có các quy định nghiệp vụ nên không cần kiểm tra
Khai báo và khởi tạo đối tượng tbSachDAL, sau đó gọi phương thức Delete để xóa đối tượng tbSach trong cơ sở dữ liệu
public static void Delete( int iD)
Phương thức GET được khai báo là phương thức static Do đó chúng ta không
cần phải khởi tạo đối tượng Bussiness để gọi phương thức GET
Khai báo và khởi tạo đối tượng tbSachDAL, sau đó gọi phương thức GET và truyền vào các tham số cần thiết để lấy những tbSach trong cơ sở dữ liệu thích hợp
public static tbSachCollection Get( string where,
int pageindex, int pagesize,
string orderby, string orderdirection,
out int total)
{
tbSachDAL sachDAL = new tbSachDAL ();
return sachDAL.Get(where, pageindex, pagesize, orderby,
orderdirection, out total);
}
2.4.5 Phương thức GetAll
Trong nhiều trường hợp, chúng ta có nhu cầu lấy hết tất cả dữ liệu có trong bảng
tbSach để xử lý, khi đó chúng ta định nghĩa thêm một phương thức GetAll
Trang 35public static tbSachCollection GetAll()
{
int total = 0;
tbSachDAL sachDAL = new tbSachDAL ();
return sachDAL.Get( "where 1=1" , 0, 0,
tbSachDAL sachDAL = new tbSachDAL ();
tbSachCollection sachCollection = sachDAL.Get( "where " +
tbSachColumns MaSach.ToString() + "=" + iD.ToString(),
0, 0, tbSachColumns MaSach.ToString(), "ASC" , out total);
if (sachCollection.Count > 0)
return sachCollection[0];
return null ;
}
Trang 36Chương 3 XÂY DỰNG PHÂN HỆ QUẢN LÝ
3.1 TẠO TRANG MASTER PAGE
3.1.1 Tạo trang Master Page
Nhấp chuột phải vào thư mục cần tạo trang Master Page chọn mục “Add New Item” như hình
Chọn loại file cần tạo là Master Page, đặt lại tên nếu cần thiết, chọn ngôn ngữ là C#
và nhấp chuột vào nút “Add” để tạo trang Master Page
Trang 373.1.2 Thiết kế giao diện cho trang Master Page
Thiết kế trang Master Page như hình Giao diện gồm 3 phần chính: Menu chức năng, ContentPlaceHolder dàng cho Sub Menu, ContentPlaceHolder để hiển thị nội dung chính
3.1.3 Kiểm tra đăng nhập
Nếu Session “UserName” chưa được tạo ra thì chương trình sẽ trả về trang đăng nhập
protected void Page_Load(object sender, EventArgs e)
{
Trang 38if (Request.Url.ToString().Contains("Default.aspx") == false
&& Session["UserName"] == null)
Response.Redirect("~/Admin/Default.aspx");
}
3.2 XÂY DỰNG CHỨC NĂNG ĐĂNG NHẬP
3.2.1 Thiết kế giao diện cho trang đăng nhập
<div style="padding:12px 12px 12px 12px;">
<asp:TextBox ID="txt_TaiKhoan"
runat="server"></asp:TextBox>
<asp:TextBox ID="txt_MatKhau"
TextMode="Password" runat="server"></asp:TextBox>
<asp:Button ID="btn_DangNhap"
runat="server" Text="Đăng nhập" OnClick="btn_DangNhap_Click" />
</td>
</tr>
<tr>
<td style="width:30%"></td>
Trang 39<td style="width:70%">
<asp:Label ID="lb_Error"
runat="server" ForeColor="red"></asp:Label>
protected void btn_DangNhap_Click(object sender, EventArgs e) {
Criteria cri = new Criteria();
cri.add(Condition.AND,
tbNhanVienColumns.TaiKhoan.ToString(), Condition.EQUAL,
Session["UserName"] = txt_TaiKhoan.Text;
Trang 403.3 XÂY DỰNG CHỨC NĂNG XEM DANH SÁCH SẢN PHẨM
3.3.1 Tạo trang danh sách sản phẩm
Chọn loại file là Web Form và check vào checkbox “Select master page”, sau đó nhấp chuột vào nút “Add”
Trong hộp thoại “Select a Master Page”, ta chọn đường dẫn đến trang Master Page của trang Web, sau đó nhấp chuột vào nút “OK”