Tiếp theo phần 1 -
Xây dựng Cơ sở dữ liệu, Tôi sẽ hướng dẫn bạn cách viết Store Procedure và sử dụng Tool tự động sinh Store Procedure. Việc viết Store đã trở nên dễ dàng đối với SQL Server, quanh đi quẩn lại cũng chỉ viết các phương thức như select, update, Insert, delete. Một trong những phiền toái và chán ngắt nhất chính là viết store, một bảng có thể viết tới tối thiểu 5 store, các bảng lặp đi lặp lại cũng chỉ với những phương thức đó. Như hình ví dụ bên dưới:
Vì nó nhiều như vậy, tốn thời gian, công sức và tiền bạc, nên người ta mới nghĩ ra các công cụ sản sinh mã tự động, giúp những người dùng là lập trình viên tiết kiệm được nhiều thứ. Ở cách 2, Tôi sẽ hướng dẫn các bạn sử dụng Tool để sinh mã. Tuy nhiên, bạn cũng nên biết cách viết Store Procedure.
Cách 1(cách thông thường):
Áp dụng mẫu với bảng User. Chú ý đến khóa chính nhé.
Store Insert:
CREATE PROC sp_Users_Insert
@Name nvarchar(500),
@UserName varchar(500),
@PassWord varchar(500),
@Rule int,
@Status int
AS
INSERT INTO [Users] ([Name],[UserName],[PassWord],[Rule],[Status]) VALUES (@Name,@UserName,@PassWord,@Rule,@Status)
Nhấn biểu tượng Execute hoặc phím F5 để chạy thủ tục, nếu thành công sẽ có thông báo như hình dưới:
Store Delete - Tương tự Insert:
CREATE PROC sp_Users_Delete
@Id int
AS
DELETE [Users] Where Id=@ID
Store Update - Tương tự Insert:
CREATE PROC sp_Users_Update
@Id int,
@Name nvarchar(500),
@UserName varchar(500),
@PassWord varchar(500),
@Rule int,
@Status int
AS
UPDATE [Users] SET [Name]=@Name,[UserName]=@UserName,[PassWord]=@PassWord,[Rule]=@Rule,[Status]=@Status Where Id=@ID
Store GetByAll - Tương tự Insert:
CREATE PROC sp_Users_GetByAll
AS
SELECT * FROM [Users]
Store GetById - Tương tự Insert:
CREATE PROC sp_Users_GetById
@Id int
AS
SELECT * FROM [Users] WHERE [Id]=@Id
Store GetByTop - Tương tự Insert:
CREATE PROC sp_Users_GetByTop
@Top nvarchar(10),
@Where nvarchar(200),
@Order nvarchar(200)
AS
DECLARE @SQL AS NVARCHAR(500)
SELECT @SQL = 'SELECT TOP ('+ @Top +') * FROM [USERS]'
IF LEN(@Top) = 0
BEGIN
SELECT @SQL='SELECT * FROM USERS'
END
IF LEN(@Where) > 0
BEGIN
SELECT @SQL= @SQL + 'WHERE' + @Where
END
IF LEN(@Order) > 0
BEGIN
SELECT @SQL= @SQL + 'ORDER BY' + @Order
END
EXEC(@SQL)
Các Store tương tự các bạn tự làm nhé. Mình thích hướng dẫn tới đâu tạo thủ tục tới đó, mình cũng nhác gõ code lặp đi lặp lại.
Cách 2(sinh mã sử dụng tool): Mình thích cách này hơn, nhanh gọn nhẹ, không lỗi, thống nhất tên riêng,...
Giới thiệu sơ lược:
CodeSmith là 1 bộ khởi tạo source code từ các template được dịnh nghia (dùng C# hoặc VB.NET) và có thể dùng dể tạo ra source code thuộc bất cứ ngôn ngữ nào hoặc tổng quát hơn là bất cứ nội dung text nào mà chúng ta cần tạo! Việc tạo ra code từ template có rất nhiều ưu diểm, chính yếu là: tiết kiệm rất đáng kể thời gian coding, tránh nhàm chán cho developer (dối với các task lặp di lặp lại) và hạn chế các bug không đáng có (hoặc lặp di lặp lại) khi không dùng template (vì code được sinh ra sẽ không có các bug do lỗi developer gây ra trừ khi template có bug!). Tóm lại, Code Generation là một huớng đi rất phổ biến hiện nay giúp developer tập trung hiện thực logic chính của ứng dụng mà không phải suy nghĩ về các vấn dề còn lại (kết nối database server, data access layer, ...).
Bước 3: Mở Tool CodeSmith
Bước 4: Add Template Nettier vào
Bước 5: Bước quan trọng trước khi bắt đầu gene code
- Tại ChooseSourceDatabase, click ô trống xuất hiện nút "..." bấm vào, tiếp tục bấm vào nút '...', và nhấn nút "Add" để mở ra hộp thoại dưới và điện một số thông tin chuỗi kết nối vào
Nhấn vào nút "Test" để kiểm tra kết nối thành công không. Nếu thành công sẽ xuất hiện hộp thoại bên dưới
Nhấn OK, rồi nhấn Close để kết thúc. Tại hộp thoại Database Picker, chọn Data Source tương ứng. Ở đây, Tôi chọn BanHangTest. Click nút "Select" để chọn.
- Tại OutputDirectory, chọn thư mục sẽ chứa Project sau khi sinh code.
Vậy là xong phần bắt đầu.
- Tại Enum Tables và SourceTables, chọn các Table cần sinh code
Vậy là xong phần thứ 2
- Chọn Version DotNet là v3 và Version Entity Library là v3_1, mình chỉ cần thấp thế này thôi.
Tại IncludeDatabaseFeatures, chọn SQL Server 2005(vì template này cũ, nên chỉ có 2005, tuy nhiên vẫn dùng đc cho SQL Server 2008, vẫn chưa có template mới, hi vọng các bạn tự tạo cho mình version mới hơn)
Vậy là xong phần Frameword. Chú ý hình mũi tên.
- Lưu lại để lần sau nếu có thay đổi Database thì vào lại để chỉnh sửa, gene lại nó cũng sẽ tự động cập nhật Project mình đang sử dụng
- Nhấn vào nút Generate bên dưới. Chờ nó loading. Nếu load thành công nó sẽ hiển thị trên website nội dung report như hình bên dưới
Bước 6: Vào thư mục đã sinh code, tìm thư mục con: BanHangTest.SQL, bên trong chứa thủ tục, mở bằng ra và copy hết đoạn code bên trong "procedures.sql", dán vào câu truy vấn SQL, và chạy nó
Bước 7: Có thể kiểm tra xem thủ tục đã tự sinh ra chưa
Tôi có đính kèm cơ sở dữ liệu mới(database + store procedure xuyên suốt từ 2 bài)
Phần tiếp theo, Tôi sẽ hướng dẫn bạn
xây dựng Lớp Data - Buisness. Nếu bạn sử dụng cách 2(Gene Code) như trên, thì bài viết tới không cần nữa. Vì nó đã tự sinh code cho chúng ta rồi. Các tầng, lớp đều đã được sinh tự động.