Bài 11 tiếp tục trình bày những kiến thức về Data Access. Trong chương này chúng ta sẽ tập trung tìm hiểu những nội dung như: Kiến trúc ADO.NET, tương tác CSDL, dùng Stored Procedure, paging trong ASP.NET,... Mời các bạn cùng tham khảo.
Trang 1Bài 11: DataAccess (02)
Lê Quang Lợi Email: loilequang@gmail.com loilq@utehy.edu.vn
Trang 2» ADO.NET
» Stored Procedure ASP.NET
» Paging ASP.NET
Bài 11: DataAccess (02)
Trang 3» Tập các đối tượng hỗ trợ lập trình tương tác CSDL
» Các đối tượng: DataSet , DataTable , DataView …
» Các đối tượng kết nối: SqlConnection , SqlCommand
» Kết nối hầu hết CSDL hiện hành
» Dùng chung mọi loại CSDL
» Thống nhất cách sử dụng, tương tác
11: ADO.NET
Trang 411.1 Kiến trúc ADO.NET
Trang 511.1 Kiến trúc ADO.NET
» ADO.NET hỗ trợ hai chế độ kết nối:
Connection : duy trì kết nối
Connectionless : không duy trì kết
» SqlConnection: chứa thông tin và thực hiện kết nối
» DataTable , DataView , DataSet: lưu trữ kết quả trả về
» SqlDataAdpapter, SqlCommand: thực thi sql
Trang 6a) Duy trì kết nối (Connection)
» Kết nối được duy trì trong toàn bộ thời gian giao dịch
» Khả năng dữ liệu luôn được cập nhật và mới nhất
» Chiếm tài nguyên: bộ nhớ, CPU, ổ đĩa lưu trữ, mạng
» Tồn tại khả năng tranh chấp tài nguyên
» Không có dữ liệu nếu như bị mất kết nối
» Các đối tượng duy trì kết nối: SqlCommand, DataReader ,
Record …
Trang 7b) Không duy trì kết nối(Connectionless)
» Dữ liệu được lấy về và tạo bản sao: DataSet, DataTable
» Dữ liệu sẵn có cùng với ứng dụng: tốn tài nguyên, bùng nổ
» Không bị mất dữ liệu khi mất kết nối
» Không tốn tài nguyên ở phía máy chứa Database
» Dữ liệu là bản sao có thể thay đổi cập nhật theo bó (bath)
» Dữ liệu là dữ liệu lịch sử trên Database
» Thao tác dữ liệu nhanh và thuận tiện
» Tồn tại khả năng tranh chấp tài nguyên
» Các đối tượng: DataSet, DataAdapter, …
Trang 8B01: Xây dựng giao diện tương tác dữ liệu
B02: Nhận dữ liệu từ giao diện đã thiết kế
B03: Tạo kết nối: SqlConnection
B3.1: Xây dựng câu truy vấn: SQL/StoredProcedure
B3.2: Thực thi câu lệnh/nhận lại kết quả: SqlCommand
B04: Hiển thị kết quả ra giao hiện tương ứng
11.1.2 Tương tác CSDL
Trang 9string strCon= ConfigurationSettings AppSettings *“myConn"+;
SqlConnection conn= new SqlConnection (strCon);
string sql = "DELETE FROM Publisher WHERE ID = 6";
SqlCommand cmd = new SqlCommand (sql, conn);
conn Open() ;
lblRecords Text = Convert ToString( cmd ExecuteNonQuery ());
conn Close() ;
11.1.2 Tương tác CSDL
Trang 10string strConn = ConfigurationSettings.AppSettings [ “myStrConn" ]; string sql = "SELECT * FROM Publisher" ;
SqlConnection conn = new SqlConnection (strConn);
SqlCommand cmd = new SqlCommand (sql, conn);
DataTable mDT= new DataTable ();
SqlDataAdapter mA = new SqlDataAdapter();
mA.SelectCommand = cmd;
conn.Open();
mA.Fill(mDT, "Publisher" );
11.1.2 Tương tác CSDL
Trang 11» Câu lệnh Sql được xây dựng trong CSDL
» Sử dụng lại mã SQL, nhiều SQL thực thực thi
» Thực thi nhanh (biên dịch một lần)
» Xử lý một khối lượng câu lệnh phức tạp phía DataBase
» Lập trình xử lý dữ liệu phía CSDL
» Triển khai, thay đổi, bảo trì CSDL thuật tiện
» Tách biệt giữa lập trình ứng dụng và lập trình CSDL
» Bảo mật : tránh injection SQL
11.2 Dùng Stored Procedure
Trang 12string conn= ConfigurationManager.AppSettings["conn"];
SqlConnection scn = new SqlConnection(con);
SqlCommand sp = new SqlCommand("CustOrdersDetail", scn);
SqlParameter theID = new SqlParameter ("@OrderID", SqlDbType.Int); theID.Value = Convert.ToInt32(this.txt1.Text);
spcmd.Parameters.Add( theID ) ;
scn.Open();
SqlDataReader dr = spcmd ExecuteReader ();
while (dr.Read()){
listBox2.Items.Add(dr.GetValue(0).ToString());
11.2 Dùng Stored Procedure
Trang 13CREATE PROCEDURE GetEmployees
@LastName nvarchar (50),
@FirstName nvarchar (50)
AS
Begin
SET NOCOUNT ON;
SELECT FirstName, LastName, Department FROM Employee WHERE FirstName = @FirstName AND
LastName = @LastName AND EndDate IS NULL ;
End
11.2 Dùng Stored Procedure
Trang 14» Tạo kết nối: SqlConnection
» Tạo đối tượng: SqlCommand
» Thực thi SqlCommnand: ExcuteSQL, ExecuteReader …
» Nhận giá trị trả về
11.2 Dùng Stored Procedure
Trang 15» Không cần hiển thị toàn bộ mảnh kết quả
» Quá trình chia nhỏ kết quả trả về thành nhiều mảnh
» Mỗi mảnh có số lượng nhất định
» Mỗi lần hiển thị mảnh tương ứng
» Đẩy nhanh tốc độc hiển thị dữ liệu
» Giảm dung lượng cho đường truyền
» Giảm tài nguyên: CPU, Time, Ram …
» Phân trang: Phía server, phía CSDL
11.3 Paging trong ASP.NET
Trang 16» Dùng các đối tượng hỗ trợ sẵn/lập trình phía server
» Các control cho phép phân trang: GrideView , ListView …
» Thuộc tính: EnablePaging = “ true ”
» Dữ liệu được đẩy về toàn bộ phía server
» Phân trang xử lý phía server
» Tốn thời gian và dung lượng, đường truyền
» Server có thể bị quá tải (sập hệ thống)
11.3.1 Phân trang phía ASP.NET (server web)
Trang 17» Dùng StoredProcedure để phân trang
» Xửa lý phân trang dựa trên DataBase server
» Dữ liệu là mảnh thích hợp lấy được
» Tận dụng được tài nguyên đường truyền
» Tránh hiện tượng bùng nổ dữ liệu phía Server
» Có thể bùng nổ dữ liệu phía Database Server
» Khó thực hiện: cho từng câu Sql và lập trình CSDL
» Giải pháp tốt cho ứng dụng web
11.3.1 Phân trang phía CSDL (server DB)
Trang 18» Đầu vào:
Đối lấy dữ liệu theo tiêu trí
pageIndex
» Tạo bảng tạm để chứa dữ liệu
Câu SQL để lấy dữ liệu và sắp xếp
» Lấy dữ liệu từ bảng tạm tại vị trí trang cần lấy
Vị trí đầu: PageNum * Pageindex
Ví trị cuối: PageNum *( pageIndex+1 )
» Trả kết quả về cho storedProcedure
11.3.1 Phân trang phía CSDL (server DB)