Chương 7 - Lập trình Web Form Với ADO.Net. Chương này gồm có những nội dung chính sau: Tổng quan về ADO.Net, các đối tượng trong ADO.Net, xây dựng lớp xử lý dữ liệu, xử lý giỏ hàng cho website thương mại điện tử. Mời các bạn cùng tham khảo.
LẬP TRÌNH WEB ASP.NET VỚI C# Giảng Viên: Th.S Phạm Đào Minh Vũ Email: phamdaominhvu@yahoo.com Chương Lập Trình Web Form Với ADO.Net 7.1 Tổng quan ADO.Net 7.2 Các đối tượng ADO.Net 7.3 Xây dựng lớp xử lý liệu 7.4 Xử lý giỏ hàng cho website thương mại điện tử 263 Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1 Tổng Quan Về ADO.Net 7.1.1 Giới thiệu 7.1.2 Kiến trúc ADO Net 7.1.3 Minh họa tạo kết nối CSDL 264 Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1.1 Giới Thiệu Hầu hết ứng dụng windows hay website cần có CSDL, để lưu trữ, xử lý, tìm kiếm báo cáo… Khi liệu trở thành trung tâm ứng dụng việc cung cấp chức tới người dùng phụ thuộc vào khả thao tác liệu, vấn đề cần quan tâm là: Lưu liệu tập trung Đảm bảo toàn vẹn liệu Đảm bảo khả truy xuất đồng thời Đảm bảo thời gian hồi đáp ngắn Bảo mật liệu Trao đổi liệu hệ thống khác 265 Khoa CNTT, Trường CĐ CNTT TP.HCM Vấn đề giải dựa vào khả Hệ QTCSDL .Net truy xuất DL qua ADO.NET, đặc điểm ADO.NET là: Khả làm việc với DL không kết nối: DL lưu trữ nhớ CSDL thu nhỏ (dataset), nhằm tăng tốc độ xử lý tính toán hạn chế sử dụng tài nguyên Khả xử lý liệu chuẩn XML (Có thể trao đổi hệ thống nào) 266 Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1.2 Kiến Trúc ADO.Net MANAGED PROVIDER CONTENT COMPONENT 267 Khoa CNTT, Trường CĐ CNTT TP.HCM Kiến trúc ADO.NET chia làm phần chính: Managed Provider Component: Bao gồm đối tượng DataAdapter, DataReader,… giữ nhiệm vụ làm việc trực tiếp với liệu database, file,… Content Component: Bao gồm đối tượng DataSet, DataTable,… đại diện cho liệu thực cần làm việc 268 Khoa CNTT, Trường CĐ CNTT TP.HCM DataReader: Là đối tượng giúp truy cập liệu nhanh chóng DataSet: Là thu nhỏ CSDL nhớ với nhiều bảng mối quan hệ DataAdapter: Là đối tượng kết nối DataSet CSDL, bao gồm đối tượng Connection Command để cung cấp liệu cho DataSet cập nhật liệu từ DataSet xuống CSDL 269 Khoa CNTT, Trường CĐ CNTT TP.HCM 7.1.3 Minh họa tạo kết nối CSDL Cơ bước thực với database Bước 1: Tạo kết nối Bước 2: Mở kết nối liệu Bước 3: Tạo lệnh điều khiển truy vấn SQL Bước 4: Thực thi lệnh Bước 5: Đóng kết nối Bước 6: in kết 270 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ: using System; using System.Data; using System.Data.SqlClient; public partial class vd1 : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { //Khai báo khởi tạo biến Connection SqlConnection cnn = new SqlConnection("Data Source=(local); Initial Catalog=QLbansach;User ID=sa;Password="); cnn.Open(); //Mở kết nối //Command điều khiển truy vấn sql SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText="select TenKH from Khachhang where MaKH=5"; //lấy chuỗi giá trị sở liệu string result = (string)cmd.ExecuteScalar(); cnn.Close(); //đóng kết nối Response.Write(result); //in giá trị hình } } 271 Khoa CNTT, Trường CĐ CNTT TP.HCM Các chức DataAdapter Lấy liệu từ nguồn: - DataTable: Fill() - DataSet: Fill() Dữ liệu lấy DataSet dạng dataTable với tên là: Table0,Table1, Table2 - Đổ liệu vào Datset cho bảng DataTable chưa có tạo mới: Fill(,) 309 Khoa CNTT, Trường CĐ CNTT TP.HCM Phương thức trả số mẫu tin lấy Dataset DS as New Dataset() Integer so; so= DA.Fill(DS, “Sinhvien”) Để cập nhật liệu nguồn Update(): Cập nhật dòng (Các đối tượng DataRow) vào nguồn liệu Update(): Cập nhật thay đổi tất bảng Dataset vào nguồn liệu Update(): Cập nhật tất thay đổi DataTable vào nguồn liệu Update(,) Cập nhật thay đổi bảng Dataset vào nguồn 310 Khoa CNTT, Trường CĐ CNTT TP.HCM 7.2.5 Dataset Dataset mơ hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu ứng dụng Dataset chứa bảng (DataTable), quanhệ (DataRelation) ràng buộc (constraint) Dataset thuộc tên miền: System.Data.Dataset Khai báo New System.Data.Dataset() Hoặc New System.Data.Dataset() 311 Khoa CNTT, Trường CĐ CNTT TP.HCM Các phương thức Thêm bảng vào Dataset Tables.Add() Một bảng tự động tạo với tên mặc định Table1, Table2 Tables.Add() Một bảng tạo theo Ghi chú: Tên bảng có phân biệt chữ in, thường Xóa bảng khỏi Dataset Tables.Remove() Xóa bảng khỏi tập hợp Table 312 Khoa CNTT, Trường CĐ CNTT TP.HCM Kiểm tra bảng có thuộc Dataset Tables.Contains() Lấy số bảng Tables.IndexOf() Lấy số bảng Dataset Tables.Count Lấy bảng Dataset Tables() Để cập nhật thay đổi Dataset AcceptChanges() 313 Khoa CNTT, Trường CĐ CNTT TP.HCM 314 Để hủy thay đổi Dataset RejectChanges() Để xóa bỏ liệu dataSet Clear() Để tạo Dataset Clone() Để xóa bỏ Dataset Dispone() Giải phóng tài nguyên vùng nhớ Dataset sử dụng Tạo quan hệ hai bảng Dataset Relations.Add(, ) Xóa quan hệ hai bảng Dataset Relations.Remove() Khoa CNTT, Trường CĐ CNTT TP.HCM 7.2.6 DataTable Dữ liệu bảng nguồn liệu lấy đưa vào DataTable DataTable thuộc tên miền : System.Data.dataTable Cú pháp: New DataTable(); New DataTable(); DataTable hình thành từ DataColumn DataRow 315 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 1: DataAdapter + update liệu try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlDataAdapter da=new SqlDataAdapter("select * from CHUDE", cnn); SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) if (row["MaCD"]=="1") { row["TENCHUDE"] = "BBB"; } response.write(ds.Tables[0].Rows[2].ItemArray[1].ToString()); GridView1.DataSource = ds.Tables[0]; //Khơng sử dụng SqlCommandBuilder khơng thể update liệu da.Update(ds); } catch (Exception) { response.write("Thất bại!"); } 316 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 2: DataAdapter + Procedure(GetNXB) try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlDataAdapter da = new SqlDataAdapter("GETNXB", cnn); DataSet ds = new DataSet(); da.Fill(ds); response.write(ds.Tables[0].Rows[2].ItemArray[1].ToString()); GridView2.DataSource = ds.Tables[0]; } catch (Exception) { response.write("Thất bại!"); } 317 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 3: DataAdapter + Procedure tham số (Getchude) try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand("Getchude", cnn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter parMACD = new SqlParameter("@MACD", SqlDbType.NChar, 10); parMACD.Value = "1"; cmd.Parameters.Add(parMACD); cnn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds.Tables[0]; cnn.Close(); } catch (Exception) { response.write("Thất bại!"); } 318 Khoa CNTT, Trường CĐ CNTT TP.HCM Ví dụ 4: DataAdapter + Đối số command 319 try { SqlConnection cnn = new SqlConnection("Data Source=(local);Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand("GETNXB", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; //da.InsertCommand = cmd; //da.DeleteCommand = cmd; //da.UpdateCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); cnn.Close(); } catch (Exception) { response.write("Thất bại!"); } Khoa CNTT, Trường CĐ CNTT TP.HCM 7.3 Xây Dựng Lớp Xử Lý Dữ Liệu Để thao tác với CSDL thuận lợi Ta nên xây dựng lớp xử lý liệu đảm nhận việc kết nối CSDL thủ tục xử lý Docbang(string LenhSQL): Nhằm thực câu lệnh truy vấn SQL để trả liệu DataTable Thuchienlenh(string LenhSQL): Nhằm thực câu lệnh Insert, Update, Delete để cập nhật liệu cho CSDL Thực hiện: Tạo cấu hình chuỗi kết nối CSDL tập tin Webconfig (Có thể dùng SQLDatasource để sinh mã)