neverlove311

New Member

Download miễn phí Giáo trình LINQ to SQL - Phần Cập nhật dữ liệu dùng Stored Procedure





Hãy chú ý cách SPROC định nghĩa tham số OrderID như một tham số dạng
OUTPUT. Đó là vì cột OrderID trong CSDL là cột tự tăng mỗi khi thêm một
bản ghi mới vào. Người gọi sẽ truyền giá trị NULL khi gọi nó – và thủ
tucjnafy sẽ trả về giá trị của OrderID mới được tạo ra (bằng cách gọi hàm
SCOPE_IDENTITY() ỏ cuối thủ tục).
Sau khi tạo ra SPROC, chúng ta sẽ mở LINQ to SQL designer của lớp truy
cập dữ liệu. Như tôi đã nói trong bài 6, chúng ta có thể kéo/thả các SPROC
từ Server Explorer lên trên màn hình chính của trình thiết kế. Chúng ta cũng
sẽ làm điều tương tự với thủ tục InsertOrder vừa được tạo



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

Cập nhật dữ liệu dùng Stored Procedure (LINQ to SQL phần 7)
Vài tuần trước tui bắt đầu viết loạt bài về LINQ to SQL. LINQ to SQL là
một bộ khung (framework) có sẵn cho O/RM (object relational mapping)
trong .NET 3.5, nó cho phép bạn dễ dàng mô hình hóa các CSDL quan hệ
dùng các lớp .NET. Bạn có thể dùng các biểu thức LINQ để truy vấn CSDL,
cũng như có thể cập nhật/thêm/xóa dữ liệu từ đó.
Dưới đây là 6 phần đầu tiên của loạt bài này:
-Sử dụng LINQ to SQL (phần 1)
-Định nghĩa các lớp mô hình dữ liệu (phần 2)
-Truy vấn Cơ sở dữ liệu (phần 3)
-Cập nhật cơ sở dữ liệu (LINQ to SQL phần 4)
-Sử dụng asp:LinqDataSource (phần 5)
-Lấy dữ liệu dùng Stored Procedure (LINQ to SQL phần 6)
-Cập nhật dữ liệu dùng Stored Procedure (LINQ to SQL phần 7)
-Thực thi các biểu thức SQL tùy biến (LINQ to SQL phần 8)
Trong phần 6 tui đã nói tới cách chúng ta có thể dùng các Stored Procedure
(SPROC) và các hàm do người dùng định nghĩa (UDF) để truy vấn và lấy dữ
liệu về dùng mô hình dữ liệu LINQ to SQL. Trong viết này, tui sẽ nói về
cách dùng các thủ tục này để cập nhật, thêm hay xóa dữ liệu.
Để có thể minh họa cho điều này, chúng ta hãy bắt đầu từ đầu và xây dựng
một lớp truy xuất dữ liệu cho CSDL mẫu Northwind:
Bước 1: Tạo lớp truy xuất dữ liệu (chưa dùng đến các thủ tục)
Trong phần 2, tui có nói về cách dùng LINQ to SQL designer có trong VS
2008 để tạo một mô hình lớp giống như dưới đây:
Thêm các quy tắc kiểm tra dữ liệu vào các lớp mô hình dữ liệu
Sau khi định nghĩa các lớp trong mô hình dữ liệu và các quan hệ giữa chúng,
chúng ta sẽ tiếp tục thêm vào các quy tắc kiểm tra tính hợp lệ của dữ liệu.
Chúng ta có thể làm điều này bằng cách thêm các lớp partial vào trong dự án
và thêm các quy tắc kiểm tra vào các lớp mô hình dữ liệu (tui đã nói đến vấn
đề này khá kỹ trong bài 4).
Ví dụ, bạn có thể thêm một quy tắc để đảm bảo rằng số điện thoại của khách
hàng được nhập đúng định dạng, và chúng ta không cho phép thêm một đơn
hàng (Order) nếu trường OrderDate lớn hơn RequiredDate. Một khi đã được
định nghĩa như dưới đây, các cách kiểm tra sẽ tự động được thực thi
bất kỳ lúc nào chúng ta cập nhật lại các đối tượng trong hệ thống.
Thêm cách GetCustomer() vào lớp DataContext
Hiện tại chúng ta đã tạo các lớp mô hình dữ liệu, và đã áp dụng các phương
thức kiểm tra trên chúng, chúng ta có thể truy vấn và tương tác với dữ liệu.
Chúng ta có thể làm được điều này bằng cách viết các câu lệnh LINQ với
các lớp mô hình dữ liệu để truy vấn và cập nhật CSDL (tui đã có nói về điều
này trong bài 3). Thêm nữa tui cũng có thể ánh xạ các SPROC vào lớp
DataContext và dùng chúng để đưa dữ liệu vào CSDL (bài 6).
Khi xây dựng các lớp dữ liệu LINQ to SQL, bạn sẽ thường có nhu cầu đưa
các câu lệnh LINQ thường dùng vào các cách tiện ích trong lớp
DataContext. Bạn có thể làm được điều này bằng cách thêm một lớp partial
váo project. Ví dụ, banks có thể thêm một cách có tên
“GetCustomer()” cho phép chúng ta tìm kiếm và lấy về các đối tượng
Customer từ CSDL dựa trên día trị của CustomerID:
Bước 2: Dùng lớp truy cập dữ liệu (chưa sử dụng SPROC)
Hiện tại chúng ta đã có một lớp truy cập dữ liệu (data access layer) để biểu
diễn mô hinh dữ liệu, tích hợp các quy tắc và cho phép chúng ta có thể thực
hiện truy vấn, cập nhật, thêm và xóa dữ liệu.
Hãy xem một trường hợp đơn giản là khi chúng ta lấy về một đối tượng
khách hàng đã có, cập nhật lại giá trị của trường ContactName và
PhoneNumber, sau đó tạo mới một đối tượng Order và kết hợp chúng với
nhau. CHúng ta có thể viết đoạn lệnh dưới đây để làm tất cả điều này trong
một transaction. LINQ to SQL sẽ đảm bảo các thủ tục kiểm tra sẽ được thực
thi và cho phép trước khi dữ liệu có thể được cập nhật một cách thực sự:
LINQ to SQL theo dõi các thay đổi mà chúng ta đã tạo trên các đối tượng
được lấy về từ DataContext, và cũng theo dõi cả các đối tượng mà chúng ta
thêm vào. Khi gọi SubmitChanges(), LINQ to SQL sẽ kiểm tra xem dữ liệu
có hợp lệ hay không, và có đúng với các quy tắc logic hay không, nếu đúng
thì các câu SQL động sẽ được sinh ra để cập nhật bản ghi Customer ở trên,
và thêm một bản ghi mới vào bảng Orders.
Chờ một giây – tui nghĩ bài viết này định nói về việc dùng SPROC cơ mà
???
Nếu vẫn đang đọc bài này, bạn có lẽ sẽ cảm giác khó hiểu vì không thấy nói
gì về SPROC. Tại sao tui hướng dẫn bạn cách viết lệnh để làm việc với các
đối tượng trong mô hình dữ liệu, rồi cho phép các câu lệnh SQL động được
thực thi? Sao tui vẫn chưa cho các bạn thấy cách để gọi các SPROC để thực
hiện việc chèm/sửa/xóa dữ liệu ?
Lý do là vì mô hình lập trình của LINQ to SQL để làm việc với các đối
tượng mô hình dữ liệu bằng SPROC cũng hoàn toàn tương tự với việc sử
dụng các câu SQL động. Cách chúng ta thêm các quy tắc kiểm tra cũng hoàn
toàn tương tự (do vậy các quy tắc mà ta đã thêm vào trước đây sẽ vẫn có
hiệu quả khi chúng ta chuyển sang dùng SPROC). Đoạn lệnh ở trên để lấy
về một Customer, rồi cập nhật và thêm một Order sẽ hoàn toàn giống nhau,
không phụ thuộc vào việc chúng ta dùng các câu SQL động hay các SPROC
để thực hiện việc truy cập vào CSDL.
Mô hình lập trình này rất mạnh mẽ theo cả hai nghĩa: nó không bắt bạn phải
học hai cách dùng khác nhau, và bạn cũng không cần quyết định ngay
từ đầu là dung SPROC hay không. Ban đầu, bạn có thể dùng các câu SQL
động được cung cấp bởi LINQ to SQL cho tất cả các câu truy vấn, chèn, cập
nhật và xóa dữ liệu. Bạn sau đó có thể thêm vào các quy tắc để kiểm tra tính
hợp lệ của dữ liệu, và rồi sau nữa lại có thể thay đổi để dùng các SPROC –
hay không tùy bạn quyết định. Các đoạn lệnh và các đoạn test bạn đã viết
trước đây sẽ vẫn được sử dụng tiếp, không phụ thuộc vào việc dùng SQL
hay SPROC.
Phần tiếp theo của bài này sẽ biểu diễn cách cập nhật mô hình dữ liệu mà
chúng ta đã tạo ra để dùng SPROC trong việc thêm/sửa/xóa dữ liệu, chúng ta
vẫn tiếp tục dùng các quy tắc xác thực, và vẫn tiếp tục làm việc với cùng các
đoạn lệnh đã viết ở trên.
Cách sử dụng SPROC để thực hiện Insert/Update/Delete
Chúng ta có thể sửa lại lớp truy cập dữ liệu đã được xây dựng trước đây để
xử lý các thao tác cập nhật, thay vì dùng các câu SQL động, theo một trong
2 cách sau:
1) Dùng LINQ to SQL designer để cấu hình các SPROC để thực thi khi gặp
thao tác thêm/xóa/sửa dữ liệu trên các lớp mô hình dữ liệu.
hoặc:
2) Thêm một lớp partial NorthwindDataContext vào dự án, rồi viết các
cách partial tương ứng với các thao tác Insert/Update/Delete (ví dụ:
InsertOrder, UpdateOrder, DeleteOrder) mà nó sẽ được gọi khi chúng ta
thực hiện Insert/Update/Delete trên các đối tượng mô hình dữ liệu. Các
cách partial đó sẽ được truyền vào các đối tượng dữ liệu mà ta muốn
cập nhật, và chúng ta có thể thực thi các thủ tục hay câu lệnh SQL mà chúng
ta muốn dùng để lưu đối tượ...
 

Các chủ đề có liên quan khác

Top