Multiple Active Result Sets MARS•MARS cho phép sử dụng một connection để tạo ra nhiều tập kết quả cùng một lúc •Sử dụng cùng một connection để thực hiện nhiều command xen kẽ • MARS được
Trang 2Nâng cao hiệu quả hoạt động cơ
sở dữ liệu
1. Các tính năng tăng cường của ADO.NET trong NET Framework 2.0
2. SQL Server Provider Statistics
Trang 31 Các tính năng tăng cường của
ADO.NET trong NET Framework 2.0
•Multiple Active Result Sets (MARS)
•Asynchronous Operations
•Batch DataSet Updates
•Bulk Data Copies
Trang 4Multiple Active Result Sets (MARS)
•MARS cho phép sử dụng một connection để tạo ra nhiều tập kết quả cùng một lúc
•Sử dụng cùng một connection để thực hiện nhiều command xen kẽ
• MARS được phép sử dụng trên các connection đến các CSDL có hổ trợ MARS như Microsoft SQL Server 2005
Trang 5Multiple Active Result Sets (MARS)
Trang 6Minh họa MARS
•Khai báo 2 chuỗi ConnectionString: chuỗi 1 có MARS, chuỗi 2 không có MARS
•Tạo 2 command:
− Command 1: có câu lệnh Select từ table Contact – Cha
− Command 2: có câu lệnh Select từ table Employee – Con
•Sử dụng Connection 1 và thi hành 2 command, sau đó đổi Connection
2 nhận xét
Trang 7Multiple Active Result Sets (MARS)
•Một số lưu ý khi sử dụng MARS
− MARS chỉ được hổ trợ từ NET 2.0 trở lên và SQL
Server 2005 trở lên
− Các hoạt động của MARS là đồng bộ (synchronous)
− Các connection có MARS sẽ tạo ra các logical Sessions làm tốn thêm chi phí phải cân nhắc có dùng hay không
− Các hoạt động có MARS là Thread không an toàn
Trang 9Asynchronous Operations
•So sánh họat động đồng bộ và không đồng
− Thi hành đồng bộ (Syschronous Execution): mỗi lệnh
phải hoàn tất trước khi lệnh kế tiếp bắt đầu thi hành
Trang 10Asynchronous Operations
•So sánh họat động đồng bộ và không đồng
− Thi hành không đồng đồng bộ (Asyschronous
Execution): ứng dụng vẫn tiếp tục thi hành các lệnh
trong khi chờ kết quả xử lý của dòng lệnh trước
Trang 11Asynchronous Operations
•Tổng quan về thi hành không đồng bộ
− ADO.NET 2.0 có các phương thức BeginXXX and
EndXXX để khởi tạo hoạt động không đồng bộ và nhận
kết quả rồi xóa sạch các tài nguyên đang hổ trợ nó
− Sử dụng giao tiếp IAsyncResult để giám sát hoạt động không đồng bộ
Trang 12Asynchronous Operations
•Tổng quan về thi hành không đồng bộ
− Khai báo: b ổ sung vào chuỗi ConnectionString thuộc
Trang 13Minh họa Asynchronous Operations
•Tạo 2 Connection từ 2 CSDL riêng biệt
•Tạo Command 1 trên Connection 1 và thi hành
•Tạo Command 2 trên Connection 2 và thi hành
•Thi hành kết thúc 2 command trên
•Tính thời gian thi hành và xuất ra màn hình
Trang 14Batch DataSet Updates
•Cải tiến thao tác truy cập dữ liệu bằng cách giảm sự xoay vòng dữ liệu trong quá trình cập nhật
•Sử dụng thuộc tính UpdateBatchSize của đối tượng DataAdapter để xác định số lệnh có thể thi hành trong một lô (batch)
Trang 15Batch DataSet Updates
•Các giá trị của UpdateBatchSize:
− = 1: mặc định (không áp dụng Batch Update)
− = 0: số dòng tối đa được cập nhật trong một batch mà
khả năng của server cho phép
− = x : x là số dòng do người lập trình khai báo
Trang 16Batch Dataset Updates
•Tạo Connection, DataAdapter và Dataset
•Khai báo 2 biến chuỗi để lưu trữ giá trị số lần cập nhật và số dòng
được cập nhật
•Phát sinh 2 sự kiện RowUpdated và RowUpdating của DataAdapter để tính toán 2 biến chuỗi
•Tạo Command có câu lệnh rút trích khoảng 11 dòng
•Tạo bộ lệnh cập nhật cho DataAdapter
•Cập nhật 1 field nào đó có giá trị bằng chính nó cộng thêm chuỗi “abc”, tất cả các dòng trong Table
•Khai báo số lần dòng trong 1 lần cập nhật là 3, thực hiện cập nhật
Trang 17Bài thực hành
•Cập nhật filed Name trong bảng Production.Product (lấy giá trị của
chính field này + “- Edit” )
•Xuất ra số lần cập nhật
Trang 18Bulk Data Copies
•Bulk Copy cho phép bạn thực hiện các hoạt động sao chép cho một số lượng lớn dữ liệu giữa một nguồn dữ liệu lưu trữ và một bảng của nguồn đích
•Sử dụng lớp SqlBulkCopy để thực hiện kỹ thuật này
Trang 19Bulk Data Copies
SqlBulkCopy <biến bcp> = new SqlBulkCopy(<Connection2>)
<biến bcp>.DestinationTableName = “Tên Table đích”;
Trang 20Minh họa Bulk Data Copies
• Tạo 2 Connection trên 2 CSDL khác nhau
• Tạo Command 1 trên connection 1 có câu lệnh rút trích
table HumanResources.Employee
• Mở 2 connection
• Tạo DataReader từ command 1
• Thực hiện Bulk Copy
Trang 212 SQL Server Provider Statistics
•Truy xuất các Statistic trên kết nối SQL Server
Trang 22Truy xuất các Statistic trên kết nối
SQL Server
•Bật thuộc tính StatisticsEnabled của đối tượng Connection
•Sử dụng phương thức RetrieveStatistics của đối tượng Connection để lưu trữ bộ dữ liệu thống kê
Trang 23Truy xuất các Statistic trên kết nối
SQL Server
•Khai báo và sử dụng
<connection>.StatisticsEnabled = true;
… // mở connection và thi hành Comand hoặc tạo DataReader
IDictionary <biến IDc> = <connection>.RetrieveStatistics();
… //duyệt <biến IDc> và xuất ra màn hình để xem các số liệu thống kê
…
Trang 24Minh họa truy xuất Statistics
• Tạo Connection có thuộc tính StatisticsEnabled=true
• Sử dụng Command để tạo nguồn dữ liệu cho DataTable
• Xuất dữ liệu của DataTable ra DataGridview 1
• Tạo mảng kiểu Idictionary để lưu số thống kê
• Xuất mảng này ra DataGriview 2