Truy cập cơ sở dữ liệu với .NET - Làm việc với ADO.NET Phần cuối
Số trang: 13
Loại file: pdf
Dung lượng: 136.59 KB
Lượt xem: 10
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Phần cuối cùng này sẽ cố gắng đưa ra nhưng kịch bản phổ biến khi phát triển các ứng dụng truy cập cơ sở dữ liệu với ADO.NET. Phân tầng các ứng dụng Việc sản xuất các phần mềm tương tác với dữ liệu thường chia ứng dụng thành nhiều tầng. Một mô hình phổ biến của một ứng dụng phân tầng là các dịch vụ dữ liệu phân tầng, và một cơ sở dữ liệu phân tầng. Một trong những cái khó của mô hình này là việc phân tách dữ liệu giữa các tầng, và định dạng...
Nội dung trích xuất từ tài liệu:
Truy cập cơ sở dữ liệu với .NET - Làm việc với ADO.NET Phần cuối Truy cập cơ sở dữ liệu với .NET Làm việc với ADO.NETPhần cuối cùng này sẽ cố gắng đưa ra nhưng kịch bản phổ biến khi phát triểncác ứng dụng truy cập cơ sở dữ liệu với ADO.NET.Phân tầng các ứng dụngViệc sản xuất các phần mềm tương tác với dữ liệu thường chia ứng dụngthành nhiều tầng. Một mô hình phổ biến của một ứng dụng phân tầng là cácdịch vụ dữ liệu phân tầng, và một cơ sở dữ liệu phân tầng.Một trong những cái khó của mô hình này là việc phân tách dữ liệu giữa cáctầng, và định dạng truyền giữa các tầng. ADO.NET đã giải quyết các vấn đềnày và đã sớm hỗ trợ cho kiểu cấu trúc này.Sao chép và trộn dữ liệuThật khó để copy một DB recordset? Trong In .NET thậy dễ dàng để saochép một DataSet:DataSet source = {some dataset};DataSet dest = source.Copy();Nó tạo một bản copy của DataSet nguồn – từng DataTable, DataColumn,DataRow, và Relation sẽ được sao chép y chan, và tất cả dữ liệu với cáctrạng thái trong file nguồn đều đươc sao chép. Nếu như bạn chỉ muốn saochép sơ đồ của DataSet, bạn có thể làm như sau:DataSet source = {some dataset};DataSet dest = source.Clone();Nó chỉ sao chép tất cả các table, relation, vân vân. Tất nhiên, DataTable sẽrỗng.Một thực tế phổ biến khi viết các hệ thống phân tầng, dựa trên Win32 hoặcweb, là có truyền dữ liệu giữa các lớp càng ít càng tốt.DataSet có phương thưc GetChanges() để giải quyết các yêu cầu này.Phương thức đơn giản này thực thi một loạt các công việc và trả về mộtDataSet với những dòng được cập nhật trong dataset nguồn. Đây là ý tưởngtruyền dữ liệu giữa các tầng, chỉ một tập nhở dữ liệu được truyền.Ví dụ sau chỉ ra cách tạo một changes DataSet:DataSet source = {some dataset};DataSet dest = source.GetChanges();Bên dưới lớp vỏ bọc là rất nhiều thứ hấp dẫn. Có hai quá tải của phươngthức GetChanges(). Một quá tải lấy giá trị của một DataRowState, và chỉ trảvề các trạng thái tương ứng. đơn giản gọi GetChanges()GetChanges(Deleted | Modified | Added), và kiểm tra nếu để bảo đảm rằngcó một vài thay đổi bằng cách gọi HasChanges(). Nếu không có thay đổinào, một giá trị được trả về ngay lập tức.Tiếp theo là sao chép DataSet. Trước tiên, một DataSet mới bỏ qua các ràngbuộc (EnforceConstraints = false), sau đó mỗi dòng đã thay đổi được saochép vào một DataSet mới.Như vậy bạn có một DataSet chỉ chứa các thay đổi, sau đó bạn có thể truyềndữ liệu này qua các tầng để sử lí. Khi dữ liệu được cập nhật vào cơ sở dữliệu, changes DataSet có thể trả về cho trình gọi (trong ví dụ này, một vàitham số xuât từ các stored procedure đã cập nhật trong các cột). Những thayđổi này có thể trộn vào bộ DataSet bằng cách dùng phương thức Merge().Tiến trình này được mô tả như sau:Tạo khoá với SQL ServerStored procedure RegionInsert trong ví dụ ở phần trước đã từng tạo ra mộtgiá trí khóa chính để chèn vào cơ sở dữ liệu. Phương thức tạo khoá đó cònthô sơ và không linh động, vì vậy một ứng dụng thực tế cần dùng đến các kĩthật tạo khóa cao cấp hơn.Đầu tiên có thể là định nghĩa một định dạng cột đơn giản, và trả về giá trị@@IDENTITY từ một stored procedure. Stored procedure dưới đây sửdụng bảng Categories trong cơ sở dữ liệu Northwind. Gõ stored procedurenày vào SQL Query Analyzer, hoặc chạy the file StoredProcs.sql trong thưmục 13_SQLServerKeys:CREATE PROCEDURE CategoryInsert(@CategoryNameNVARCHAR(15), @Description NTEXT, @CategoryID INTEGER OUTPUT) AS SET NOCOUNT OFF INSERT INTO Categories (CategoryName, Description) VALUES(@CategoryName, @Description) SELECT @CategoryID = @@IDENTITYGONó chèn một dòng mới vào bảng Category, và trả về khóa chính cho trìnhgọi. Bạn có thể kiểm tra procedure này bằng cách gõ dòng SQL sau vàoQuery Analyzer:DECLARE @CatID int;EXECUTE CategoryInsert Pasties , Heaven Sent Food , @CatIDOUTPUT;PRINT @CatID;Khi thực thi một bó lệnh, nó sẽ chèn mọt dòng mới vào bảng Categories, vàtrả về nhận dạng của dòng mới này, sau đó biểu diễn cho người dùng.Giả sử rằng sau một vài tháng sử dụng, một ai đó muốn có một sổ theo dõiđơn giản, để báo cáo những cập nhật và sửa đổi trên category name. Bạn sẽđịnh nghĩa một bảng như sau, để chỉ ra các giá trị mới và cũ của category:Mã sẵn có trong StoredProcs.sql. Cột AuditID được định nghĩa như một cộtIDENTITY. Sau đó bạn cấu trúc mọt cặp trigger để báo cáo các thay đổi trêntrường CategoryName:CREATE TRIGGER CategoryInsertTrigger ON Categories AFTER UPDATEAS INSERT INTO CategoryAudit(CategoryID , OldName , NewName ) SELECT old.CategoryID, old.CategoryName, new.CategoryName FROM Deleted AS old, Categories AS new WHERE old.CategoryID = new.CategoryID;GOBạn phải dùng Oracle stor ...
Nội dung trích xuất từ tài liệu:
Truy cập cơ sở dữ liệu với .NET - Làm việc với ADO.NET Phần cuối Truy cập cơ sở dữ liệu với .NET Làm việc với ADO.NETPhần cuối cùng này sẽ cố gắng đưa ra nhưng kịch bản phổ biến khi phát triểncác ứng dụng truy cập cơ sở dữ liệu với ADO.NET.Phân tầng các ứng dụngViệc sản xuất các phần mềm tương tác với dữ liệu thường chia ứng dụngthành nhiều tầng. Một mô hình phổ biến của một ứng dụng phân tầng là cácdịch vụ dữ liệu phân tầng, và một cơ sở dữ liệu phân tầng.Một trong những cái khó của mô hình này là việc phân tách dữ liệu giữa cáctầng, và định dạng truyền giữa các tầng. ADO.NET đã giải quyết các vấn đềnày và đã sớm hỗ trợ cho kiểu cấu trúc này.Sao chép và trộn dữ liệuThật khó để copy một DB recordset? Trong In .NET thậy dễ dàng để saochép một DataSet:DataSet source = {some dataset};DataSet dest = source.Copy();Nó tạo một bản copy của DataSet nguồn – từng DataTable, DataColumn,DataRow, và Relation sẽ được sao chép y chan, và tất cả dữ liệu với cáctrạng thái trong file nguồn đều đươc sao chép. Nếu như bạn chỉ muốn saochép sơ đồ của DataSet, bạn có thể làm như sau:DataSet source = {some dataset};DataSet dest = source.Clone();Nó chỉ sao chép tất cả các table, relation, vân vân. Tất nhiên, DataTable sẽrỗng.Một thực tế phổ biến khi viết các hệ thống phân tầng, dựa trên Win32 hoặcweb, là có truyền dữ liệu giữa các lớp càng ít càng tốt.DataSet có phương thưc GetChanges() để giải quyết các yêu cầu này.Phương thức đơn giản này thực thi một loạt các công việc và trả về mộtDataSet với những dòng được cập nhật trong dataset nguồn. Đây là ý tưởngtruyền dữ liệu giữa các tầng, chỉ một tập nhở dữ liệu được truyền.Ví dụ sau chỉ ra cách tạo một changes DataSet:DataSet source = {some dataset};DataSet dest = source.GetChanges();Bên dưới lớp vỏ bọc là rất nhiều thứ hấp dẫn. Có hai quá tải của phươngthức GetChanges(). Một quá tải lấy giá trị của một DataRowState, và chỉ trảvề các trạng thái tương ứng. đơn giản gọi GetChanges()GetChanges(Deleted | Modified | Added), và kiểm tra nếu để bảo đảm rằngcó một vài thay đổi bằng cách gọi HasChanges(). Nếu không có thay đổinào, một giá trị được trả về ngay lập tức.Tiếp theo là sao chép DataSet. Trước tiên, một DataSet mới bỏ qua các ràngbuộc (EnforceConstraints = false), sau đó mỗi dòng đã thay đổi được saochép vào một DataSet mới.Như vậy bạn có một DataSet chỉ chứa các thay đổi, sau đó bạn có thể truyềndữ liệu này qua các tầng để sử lí. Khi dữ liệu được cập nhật vào cơ sở dữliệu, changes DataSet có thể trả về cho trình gọi (trong ví dụ này, một vàitham số xuât từ các stored procedure đã cập nhật trong các cột). Những thayđổi này có thể trộn vào bộ DataSet bằng cách dùng phương thức Merge().Tiến trình này được mô tả như sau:Tạo khoá với SQL ServerStored procedure RegionInsert trong ví dụ ở phần trước đã từng tạo ra mộtgiá trí khóa chính để chèn vào cơ sở dữ liệu. Phương thức tạo khoá đó cònthô sơ và không linh động, vì vậy một ứng dụng thực tế cần dùng đến các kĩthật tạo khóa cao cấp hơn.Đầu tiên có thể là định nghĩa một định dạng cột đơn giản, và trả về giá trị@@IDENTITY từ một stored procedure. Stored procedure dưới đây sửdụng bảng Categories trong cơ sở dữ liệu Northwind. Gõ stored procedurenày vào SQL Query Analyzer, hoặc chạy the file StoredProcs.sql trong thưmục 13_SQLServerKeys:CREATE PROCEDURE CategoryInsert(@CategoryNameNVARCHAR(15), @Description NTEXT, @CategoryID INTEGER OUTPUT) AS SET NOCOUNT OFF INSERT INTO Categories (CategoryName, Description) VALUES(@CategoryName, @Description) SELECT @CategoryID = @@IDENTITYGONó chèn một dòng mới vào bảng Category, và trả về khóa chính cho trìnhgọi. Bạn có thể kiểm tra procedure này bằng cách gõ dòng SQL sau vàoQuery Analyzer:DECLARE @CatID int;EXECUTE CategoryInsert Pasties , Heaven Sent Food , @CatIDOUTPUT;PRINT @CatID;Khi thực thi một bó lệnh, nó sẽ chèn mọt dòng mới vào bảng Categories, vàtrả về nhận dạng của dòng mới này, sau đó biểu diễn cho người dùng.Giả sử rằng sau một vài tháng sử dụng, một ai đó muốn có một sổ theo dõiđơn giản, để báo cáo những cập nhật và sửa đổi trên category name. Bạn sẽđịnh nghĩa một bảng như sau, để chỉ ra các giá trị mới và cũ của category:Mã sẵn có trong StoredProcs.sql. Cột AuditID được định nghĩa như một cộtIDENTITY. Sau đó bạn cấu trúc mọt cặp trigger để báo cáo các thay đổi trêntrường CategoryName:CREATE TRIGGER CategoryInsertTrigger ON Categories AFTER UPDATEAS INSERT INTO CategoryAudit(CategoryID , OldName , NewName ) SELECT old.CategoryID, old.CategoryName, new.CategoryName FROM Deleted AS old, Categories AS new WHERE old.CategoryID = new.CategoryID;GOBạn phải dùng Oracle stor ...
Tìm kiếm theo từ khóa liên quan:
lập trình tài liệu lập trình kỹ thuật lập trình giáo trình C ngôn ngữ lập trình C tự học lập trình với CTài liệu có liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 310 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 251 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 223 0 0 -
101 trang 211 1 0
-
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 189 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 160 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 154 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 143 0 0 -
161 trang 140 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 131 0 0