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
18 trang |
Chia sẻ: thuychi16 | Lượt xem: 756 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Công nghệ web - Bài 11: Data access (02), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài 11: DataAccess (02)
Lê Quang Lợi
Email: loilequang@gmail.com
loilq@utehy.edu.vn
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» ADO.NET
» Stored Procedure ASP.NET
» Paging ASP.NET
Bài 11: DataAccess (02)
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
11.1 Kiến trúc ADO.NET
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
11.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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
a) 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
b) 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,
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
B01: 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
string 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
string 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");
conn.Close();
g1.DataSource=mDT; g1.DataBind();
11.1.2 Tương tác CSDL
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
string conn= ConfigurationManager.AppSettings["conn"];
SqlConnection scn = new SqlConnection(con);
SqlCommand sp = new SqlCommand("CustOrdersDetail", scn);
spcmd.CommandType = CommandType.StoredProcedure
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());
}
dr.Close();
scn.Close();
11.2 Dùng Stored Procedure
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
CREATE 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» Tạo kết nối: SqlConnection
» Tạo đối tượng: SqlCommand
Tạo CommantType: StoredProcedure
Tạo tạo các SqlPramater: name/ value
Truyền Paramater cho storedProcedure: add()
» Thực thi SqlCommnand: ExcuteSQL, ExecuteReader
» Nhận giá trị trả về
» Hiển thị kết quả nhận được
11.2 Dùng Stored Procedure
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» 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
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» 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)
» Không phải là phương pháp tốt
Chú ý: tránh hiện tượng bùng nổ tài nguyên/truy cập
11.3.1 Phân trang phía ASP.NET (server web)
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» 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)
Lê Quang Lợi: loilequang@gmail.com Môn học : Công nghệ WEB (ASP.NET) CNPM-CNTT-ĐHSPKT HY
» Đầ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)