ADO.NET, 3 Layers - Ngô Ngọc Đăng Khoa

• ActiveX Data Object .NET • Hỗ trợ kết nối, xử lý CSDL trên .NET – Access – SQL Server – . • Đối với HQT CSDL chưa được ADO.NET hỗ trợ sẵn  cần cài thêm provider – MySQL Connector .NET (MySQL) – ADO.NET 2.0 Provider for SQLite3 (SQLite3)

pdf35 trang | Chia sẻ: lylyngoc | Lượt xem: 1839 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu ADO.NET, 3 Layers - Ngô Ngọc Đăng Khoa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ADO.NET, 3 Layers Ngô Ngọc Đăng Khoa 1 ADO.NET 2 Giới thiệu • ActiveX Data Object .NET • Hỗ trợ kết nối, xử lý CSDL trên .NET – Access – SQL Server – ... • Đối với HQT CSDL chưa được ADO.NET hỗ trợ sẵn  cần cài thêm provider – MySQL Connector .NET (MySQL) – ADO.NET 2.0 Provider for SQLite3 (SQLite3) – ... 3 • xxxConnection • xxxDataAdapter • xxxCommandBuilder Mô hình • xxxConnection • xxxDataReader • xxxCommand Connect ed ADO.NET có 2 mô hình hoạt động 4 Dis connect ed DataSet DataTable ArrayList List Disconnected Model • Thao tác đọc (Select) 5 xxxDataAdapter xxxConnection Select DataSet DataTable Example • Access using System.Data.OleDb; //---------------------------------------------------------------------- string cnStr = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=‘db.mdb’"; OleDbConnection cn = new OleDbConnection(cnStr); string sql = "select * from HocSinh"; OleDbDataAdapter da = new OleDbDataAdapter(sql, cn); DataTable dt = new DataTable(); //DataSet ds = new DataSet(); da.Fill(dt); //da.Fill(ds); 6 Example • SQL Server using System.Data.SqlClient; //---------------------------------------------------------------------- string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; //string cnStr = "Server=.; Database=QLHS; Integrated Security=True;"; //string cnStr = "Server=.; Database=QLHS; UID=...; PWD=...;"; SqlConnection cn = new SqlConnection(cnStr); string sql = "select * from HocSinh"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); DataTable dt = new DataTable(); //DataSet ds = new DataSet(); da.Fill(dt); //da.Fill(ds); 7 Hot Tip • Các thao tác lên các CSDL khác nhau trong ADO.NET là khá tương đồng • Khác biệt ở những điểm sau đây: – using thư viện khác – Chuỗi kết nối khác – Thay xxx trong xxxConnection, xxxDataAdapter, … thành các tên tương ứng: • OleDbConnection, SqlConnection • OleDbDataAdapter, SqlDataAdapter • ... 8 Disconnected Model • Thao tác ghi (Insert/Delete/Update) 9 DataSet DataTable xxxDataAdapter Select Dữ liệu gốc xxxCommandBuilder xxxDataAdapter xxxConnection Example - Insert • SQL Server //dt là DataTable đã chứa dữ liệu lấy từ bảng HocSinh DataRow row = dt.NewRow(); dt.Rows.Add(row); row["TenHS"] = "CR7"; row["DiaChi"] = "MU"; row["DienThoai"] = string.Empty; row["NgaySinh"] = new DateTime(1985, 1, 1); row["MaLop"] = 2; SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); da.Update(dt); 10 Example - Delete • SQL Server string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); string sql = "select * from HocSinh where MaHS=1"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); DataTable dt = new DataTable(); da.Fill(dt); dt.Rows[0].Delete(); //chưa kiểm tra dữ liệu SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); da.Update(dt); 11 Example - Update • SQL Server string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); string sql = "select * from HocSinh where MaHS=1"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); DataTable dt = new DataTable(); da.Fill(dt); DataRow row = dt.Rows[0]; row["TenHS"] = "CR7"; row["DiaChi"] = "RM"; SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); da.Update(dt); 12 Connected Model • Thao tác đọc (Select) 13 xxxCommand xxxConnection Select xxxDataReader Example string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); SqlCommand cmd = new SqlCommand("select * from HocSinh", cn); cmd.Connection.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { int maHS = reader.GetInt32(0); string tenHS = reader["TenHS"].ToString(); string diaChi = reader.GetString(2); string dienThoai = reader["DienThoai"].ToString(); DateTime ngaySinh = Convert.ToDateTime(reader["NgaySinh"]); int maLop = Convert.ToInt32(reader["MaLop"]); } reader.Close(); cmd.Connection.Close(); 14 Connected Model • Thao tác ghi (Insert/Delete/Update) 15 xxxCommand xxxConnection Insert Delete Update Store Procedure Functions Example string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); string sql = “Delete From HocSinh Where MaHS=1”; //string sql = “Update HocSinh Set TenHS=‘RO10’ Where MaHS=1”; //string sql = “Insert Into HocSinh(TenHS) Values(‘Messi’)”; SqlCommand cmd = new SqlCommand(sql, cn); cmd.Connection.Open(); cmd.ExecuteNonQuery(); //thực thi lệnh cmd.Connection.Close(); 16 xxxCommand Connection Command Type Command Text Command TimeOut Parameters 5. Thời gian chờ đợi thực thi 1 câu SQL 1. Trỏ đến đối tượng kết nối 2. Loại command 3. Câu SQL hoặc tên proc, tên bảng Các thuộc tính quan trọng của đối tượng xxxCommand 17 4. Danh sách các tham số truyền vào CommandType Các giá trị của thuộc tính CommandType Text Store Procedure Table Direct CommandType.Text Giá trị mặc định của CommandType CommandType.StoreProcedure CommandType.TableDirect 18 Command’s methods xxxCommand Kiểu trả về của các hàm thông dụng trong đối tượng xxxCommand Các hàm thông dụng xxxCommand Trả về 1 XMLReader Trả về một DataReader Trả về số lượng dòng bị ảnh hưởng Trả về 1 giá trị duy nhất 19 Example string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); string sql = “Select COUNT(*) From HocSinh”; SqlCommand cmd = new SqlCommand(sql, cn); cmd.Connection.Open(); int n = Convert.ToInt32(cmd.ExecuteScalar()); cmd.Connection.Close(); //Sử dụng n 20 Parameter • Để truyền dữ liệu vào Command – Dùng dữ liệu & phép toán nối chuỗi để tạo commandText hoàn chỉnh string sql = "Update HocSinh Set TenHS=‘" + tenHS + “’ Where MaHS=" + maHS; – Dùng xxxParameter • Tham số hóa câu truy vấn: ? hoặc @[tên tham số] • Tạo các parameters tương ứng cho command • Gán giá trị cho các parameters 21 Example string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); string sql = “Update HocSinh Set TenHS=@TenHS Where MaHS=@MaHS”; //string sql = “Update HocSinh Set TenHS=? Where MaHS=?”; SqlCommand cmd = new SqlCommand(sql, cn); cmd.Parameters.Add(“@TenHS”, SqlDbType.NVarChar); cmd.Parameters.Add(“@MaHS”, SqlDbType.Int); cmd.Parameters[“@TenHS”].Value = “RO10”; cmd.Parameters[“@MaHS”].Value = 1; cmd.Connection.Open(); cmd.ExecuteNonQuery(); //thực thi lệnh cmd.Connection.Close(); 22 Thứ tự tham số? Tip: Access Password • CSDL Access cho phép đặt mật khẩu • Phương pháp đặt mật khẩu Database Tools > Encrypt with Password 23 ConnectionString string cnStr = “ Provider=Microsoft.Jet.OleDb.4.0; Data Source=‘db.mdb’; Jet OLEDB:Database Password=‘pwd’ ” 24 3 LAYERS 25 ArrayList ArrayList list = new ArrayList(); list.Add(“string-1”); list.Add(“string-2”); list.Add(“string-3”); string s = list[0].ToString(); //--------------------------------------------------------------------- ArrayList list = new ArrayList(); list.Add(0); list.Add(1); list.Add(2); int i = (int)list[0]; 26 ArrayList ArrayList list = new ArrayList(); list.Add(“string-1”); list.Add(“string-2”); list.Add(“string-3”); int s = (int)list[0]; 27 ERROR Generics List list = new List(); list.Add(“string-1”); list.Add(“string-2”); list.Add(“string-3”); string s = list[0]; //--------------------------------------------------------------------- list.Add(0); //FAILED 28 Kiến trúc 3-layers • Chia phần mềm thành các lớp (layer) • Mỗi lớp có vai trò, đặc trưng riêng • Ưu điểm: – Sẵn sàng cho việc mở rộng hệ thống – Thuận tiện cho việc sự dụng lại – Dễ bảo trì – Dễ dàng phân chia công việc 29 Kiến trúc 3-layers 30 Presentation/GUI Business Data Access Data Transfer Object (DTO) Data Access Layer • Quản lý việc: – Thêm/Xóa /Sửa – Truy vấn • Trên: – Cơ sở dữ liệu – XML – Files 31 Presentation/GUI Business Data Access Business Layer 32 Presentation/GUI Business Data Access Xử lý nghiệp vụ GUI Layer 33 Presentation/GUI Business Data Access Input/Output DEMO 34 Thank You! Question & Answers 35