Bài giảng Lập trình trên môi trường Windows - Chương 6: Các đối tượng trong ADO.NET - Dương Thành Phết

1. ĐỐI TƯỢNG CONNECTION Các bước tạo kết nối  Bước 1: Khởi tạo đối tượng Connection với tham số connection string đối với database tương ứng.  Bước 2: Thiết lập kết nối đến database bằng phương thức Open.  Bước 3: Thực hiện các thao tác khai thác dữ liệu (select, insert, delete, update) từ database.  Bước 4: đóng kết nối đến database bằng phương thức Close. Tạo kết nối với SQLServer (cách 1) using System.Data.SqlClient; . SqlConnection cnn = new SqlConnection(); cnn.ConnectionString = server=localhost; database=Northwind; uid=sa; pwd=sa"; cnn.Open(); //Mở kết nối //xử lý trong quá trình kết nối cnn.Close(); //Đóng két nối Sử dụng tên miền: System.Data.SqlClient; Server: Chỉ định tên máy chứa Database Database: Chỉ định tên cơ sở dữ liệu Uid: Tên tài khỏan đăng nhập SQLServer (nếu có) Pwd: Mật khẩu đăng nhập (nếu có)

pdf51 trang | Chia sẻ: thanhle95 | Lượt xem: 606 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình trên môi trường Windows - Chương 6: Các đối tượng trong ADO.NET - Dương Thành Phết, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 Chương 6: CÁC ĐỐI TƯỢNG TRONG ADO.NET  Giảng Viên: ThS. Dương Thành Phết  Email: phetcm@gmail.com – YahooID: phetcm  Website:  Tel: 0918158670 2 NỘI DUNG 1.Đối tượng Connection 2.Đối tượng Command 3.Đối tượng DataReadder 4.Đối tượng Dataset 5.Đối tượng DataAdapter 6.Giao tiếp CSDL theo mô hình 1 lớp 7.Giao tiếp CSDL theo mô hình 1 lớp 3  Vai trò của Connection trong ADO.net là tạo kết nối giữa ứng dụng với CSDL.  Khi cthực hiện kết nối cần xác định các thông tin cho Connection thông qua thuộc tính Connection String. Tùy thuoc vào Data Provider  Với SQLServer • Server name • Database name • User name • Password  Với Access • Database name • User name • Password 1. ĐỐI TƯỢNG CONNECTION 4  Thuộc tính  ConnectionString: Chuỗi kết nối DataSource  State: Tình trạng kết nối: Connecting (đang kêt nối), Open (đã. kêt nối), Broken (kết nối bị ngắt khi đã kết nối), Closed (kết nối đã đóng) . . .  Phương thức  Open(): Thiết lập kết nối đến DS  Close(): Đóng kết nối với DS 1. ĐỐI TƯỢNG CONNECTION 5 Các bước tạo kết nối  Bước 1: Khởi tạo đối tượng Connection với tham số connection string đối với database tương ứng.  Bước 2: Thiết lập kết nối đến database bằng phương thức Open.  Bước 3: Thực hiện các thao tác khai thác dữ liệu (select, insert, delete, update) từ database.  Bước 4: đóng kết nối đến database bằng phương thức Close. 1. ĐỐI TƯỢNG CONNECTION 6 using System.Data.SqlClient; .... SqlConnection cnn = new SqlConnection(); cnn.ConnectionString = server=localhost; database=Northwind; uid=sa; pwd=sa"; cnn.Open(); //Mở kết nối //xử lý trong quá trình kết nối cnn.Close(); //Đóng két nối 1. ĐỐI TƯỢNG CONNECTION Sử dụng tên miền: System.Data.SqlClient; Server: Chỉ định tên máy chứa Database Database: Chỉ định tên cơ sở dữ liệu Uid: Tên tài khỏan đăng nhập SQLServer (nếu có) Pwd: Mật khẩu đăng nhập (nếu có) Tạo kết nối với SQLServer (cách 1) 7 using System.Data.SqlClient; .... SqlConnection cnn = new SqlConnection(); cnn.ConnectionString = “Data Source=localhost; Initial Catalog=Northwind; UserId=sa; Password=sa” cnn.Open(); //Mở kết nối //xử lý trong quá trình kết nối cnn.Close(); //Đóng két nối 1. ĐỐI TƯỢNG CONNECTION DataSource: Chỉ định tên máy chứa Database Initial Catalog: Chỉ định tên cơ sở dữ liệu Userid: Tên tài khỏan đăng nhập SQLServer (nếu có) Password: Mật khẩu đăng nhập (nếu có) Tạo kết nối với SQLServer (cách 2) 8 using System.Data.OleDb; .... OleDBConnection cnn = new OleDbSqlConnection(); cnn.ConnectionString = “Provider = Microsoft.Jet.OLEDB.4.0; Data Source=QLHOCSINH.MDB"; cnn.Open(); //xử lý trong quá trình kết nối cnn.Close(); Tạo kết nối với MS Access Đối với MS Access 2007/2010 thì Provider=Microsoft.ACE.OLEDB.12.0 1. ĐỐI TƯỢNG CONNECTION 9 Minh họa: 1. ĐỐI TƯỢNG CONNECTION using System.Data.SqlClient; .... SqlConnection cnn = new SqlConnection(); private void btLogin_Click(object sender, EventArgs e) { String Tenmay = txtServername.Text; String TenDN = txtUsername.Text; String Matkhau = txtPassword.Text; String TenCSDL = txtDatabasename.Text; cnn.ConnectionString = "Server=" + Tenmay + "; Database=" + TenCSDL + " ; User Id=" + TenDN + "; Password= " + Matkhau; try { cnn.Open(); MessageBox.Show("Kết nối thành công", "Thông báo"); cnn.Close(); } catch { MessageBox.Show("Kết nối thất bại", "Thông báo"); } } 10 2. ĐỐI TƯỢNG COMMAND  Quá trình tương tác với database cần phải biết hành động nào muốn xảy ra. Điều này được thực hiện bởi đối tượng command.  Dùng đối tượng command để gửi một câu lệnh SQL tới database.  Một đối tượng command dùng một đối tượng connection để xác định database nào sẽ được truy xuất.  Có thể dùng một đối tượng command riêng lẻ để thực thi lệnh trực tiếp, hoặc gắn cho một SqlDataAdapter 11  Thuộc tính:  Connection:Kết nối để thực hiện lệnh  CommandText:Câu lệnh cần thực hiện  CommandType:Loại câu lệnh (Text, TableDirect, StoredProc)  Phương thức:  ExecuteScalar(): Thực hiện lệnh và trả về giá trị đơn  ExecuteNonQuery(): Gọi các lệnh SQL, store, trả về số row bị tác động (Insert, Update, Delete)  ExecuteReader():Thực hiện lệnh và trả về DataReader 2. ĐỐI TƯỢNG COMMAND 12 SqlConnection cnn = new SqlConnection(); cnn.ConnectionString = “Data Source=localhost; Initial Catalog=QLsinhvien; User Id=sa; Password=sa” cnn.Open(); //Mở kết nối SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = “Select Count(*) From TableName”; int n = (int) cmd.ExecuteScalar(); cnn.Close(); 2. ĐỐI TƯỢNG COMMAND  SQL Command với câu lệnh Select 13 . . . . . SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; String MaMH = txtMaMH.Text; String TenMH = txtTenMH.Text; int Sotiet = int.Parse(txtSotiet.Text); cmd.CommandText = "Insert into Monhoc(MaMH,TenMH, Sotiet) values('" + MaMH + "',N'" + TenMH +"'," + Sotiet +")"; cmd.ExecuteNonQuery(); 2. ĐỐI TƯỢNG COMMAND  SQL Command với câu lệnh Insert, Update, Delete 14 3. ĐỐI TƯỢNG DATAREADER  Nhiều thao tác dữ liệu chỉ lấy một luồng dữ liệu để đọc. Đối tượng data Reader cho phép lấy được kết quả của câu lệnh SELECT từ đối tượng command.  Để tăng hiệu suất, dữ liệu trả về từ một data reader là một luồng dữ liệu fast forward-only có lợi về mặt tốc độ.  Là đối tượng truy cập dữ liệu trực tiếp sử dụng con trỏ phí Server và duy trì kết nối trong suốt quá trình đọc dữ liệu.  Tuy nhiên nếu phải thao tác dữ liệu, thì một DataSet sẽ là một đối tượng tốt hơn để làm việc 15 3. ĐỐI TƯỢNG DATAREADER Các thuộc tính  FieldCout: Số cột trên dòng hiện hành của DataReader  IsClosed: Cho biết dataReader đã đóng  Item: Trị của cột truyền vào. Tham số truyền vào là tên cột (hoặc số thứ tự từ 0) 16 3. ĐỐI TƯỢNG DATAREADER Các phương thức  Close: Đóng DataReader  GetFieldType: Trả về kiểu dữ liệu của cột truyền vào.  GetName: Trả về tên của cột truyền vào  GetValue: Trả về trị của cột truyền vào  Read : Di chuyển đến dòng kế tiếp và trả về true nếu còn dòng để di chuyển, ngược lại trả về False. Trong khi dataReader đang mở các thao tác dữ liệu trên nguồn dữ liệu đều không thể cho đến khi dataRaeder đóng lại bằng lệnh Close. 17 3. ĐỐI TƯỢNG DATAREADER . . . . . SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "Select * From Monhoc"; cmd.CommandType = CommandType.Text; SqlDataReader dr ; dr = cmd.ExecuteReader(); lstMonhoc.Items.Clear(); while (dr.Read()) lstMonhoc.Items.Add(dr["TenMH"]); 18 4. DATA ADAPTER 4.1. Giới thiệu  Để lầy dữ liệu từ nguồn dữ liệu vầ cho ứng dụng, chúng ta sử dụng một đối tượng gọi là DataAdapter. Đối tượng này cho phép ta lấy cấu trúc và dữ liệu của các bảng trong nguồn dữ liệu.  DataAdapte là một bộ gồm 4 đối tượng command:  SelectCommand: Cho phép lấy thông tin từ nguồn.  InsertCommand: Cho phép thêm dữ liệu vào bảng.  UpdateCommand: Cho phép điều chỉnh dữ liệu của bảng.  DeleteCommand: Cho phép xóa dữ liệu của bảng. 19 4. DATA ADAPTER  Đôi khi cần làm việc ở chế độ read-only và ít khi cần thay đổi dữ liệu nguồn, cần lưu trữ tạm dữ liệu trong bộ nhớ để hạn chế truy xuất đến database. Data adapter làm điều này dễ dàng bằng cách giúp quản lý dữ liệu trong chế độ ngắt kết nối.  Data Adapter sẽ đổ vào DataSet khi đọc dữ liệu và thực hiện thay đổi dữ liệu một lượt vào database. Data adapter chứa một tham chiếu đến đối tượng connection và mở/đóng kết nối tự động khi đọc và ghi dữ liệu vào database. 20 4. DATA ADAPTER 4.2. Tạo DataAdapter DataAdapter = new DataAdapter(Lệnh, biến connnection); Với SQLSever: sqlDataAdapterDataAdapter = new SQLDataAdapter(Lệnh, biến connection); DataAdapter chỉ thao tác với một nguồn dữ liệu qua một đối tượng connection đang kết nối, khi Connection chưa mở thì DataAdapter sẽ tự động mở kết nối khi cần và đóng lại. 21 4. DATA ADAPTER 4.3. Các thuộc tính của DataAdapter  DeleteCommand: Đối tượng Command chứa nội dung lệnh hủy các mẫu tin trên nguồn dữ liệu.  InsertCommand: Đối tượng Command chứa nội dung lệnh thêm các mẫu tin trên nguồn dữ liệu.  SelectCommand: Đối tượng Command chứa nội dung lệnh truy xuất các mẫu tin trên nguồn dữ liệu.  UpdateCommand: Đối tượng Command chứa nội dung lệnh sửa các mẫu tin trên nguồn dữ liệu. 22 4. DATA ADAPTER 4.4. Các chức năng của DataAdapter  Lấy dữ liệu từ nguồn: Sử dụng DataAdapter để lấy dữ liệu về cho các đối tượng  DataTable: Fill()  DataSet: Fill()  Dữ liệu lấy về DataSet dưới dạng các dataTable với tên mặc định là: Table0,Table1, Table2. . .:  Đổ dữ liệu vào Datset cho bảng DataTable nếu chưa có sẽ tạo mới: Fill(,) 23 4. DATA ADAPTER  Lấy dữ liệu từ nguồn: Sử dụng DataAdapter để lấy dữ liệu về cho các đối tượng  DataTable: Fill()  DataSet: Fill()  Dữ liệu lấy về DataSet dưới dạng các dataTable với tên mặc định là: Table0,Table1, Table2. . .:  Đổ dữ liệu vào Datset cho bảng DataTable nếu chưa có sẽ tạo mới: Fill(,) 24 4. DATA ADAPTER  Phương thức trả về mẫu tin lấy được Dataset DS as New Dataset() Integer so; so= DA.Fill(DS,”Sinhvien”)  Để cập nhật dữ liệu về nguồn Update(): Cập nhật các dòng (Các đối tượng DataRow) vào nguồn dữ liệu. Update(): Cập nhật các thay đổi trên tất cả các bảng của Dataset vào nguồn dữ liệu. Update(): Cập nhật tất cả các thay đổi trên DataTable vào nguồn dữ liệu. Update(,) Cập nhật các thay đổi trên bảng trong Dataset vào nguồn. 25 5. DATASET 5.1. Giới thiệu  Dataset là một mô hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu của ứng dụng.  Dataset chứa các bảng (DataTable) các quanhệ (DataRelation) và các ràng buộc (constraint)  Trong DataTable có nhiều column và row. Như các Database thông thường. 26 5. DATASET 5.2. Khai báo DataSet = new DataSet(); Ví dụ: DataSet ds = new DataSet(); 27 5. DATASET 5.3. Các phương thức  Thêm một bảng vào Dataset Tables.Add()  Một bảng mới tự động được tạo ra với tên mặc định Table1, Table2 . . . Tables.Addd()  Xóa bảng ra khỏi Dataset Tables.Remove()  Kiểm tra bảng có thuộc về Dataset Tables.Contains()  Lấy chỉ số của bảng Tables.IndexOf() 28 5. DATASET 5.3. Các phương thức  Lấy số bảng trong Dataset Tables.Count  Lấy ra một bảng trong Dataset Tables()  Để cập nhật các thay đổi trên Dataset AcceptChanges()  Để hủy các thay đổi trên Dataset RejectChanges()  Để xóa bỏ mọi dữ liệu trên dataSet Clear()  Để tạo một bản sao của Dataset Clone() 29 5. DATASET 5.3. Các phương thức  Để xóa bỏ Dataset Gọi phương thức Dispone() để giải phóng mọi tài nguyên trên vùng nhớ Dataset đang sử dụng.  Tạo quan hệ giữa hai bảng trong Dataset. Relations.Add(, )  Xóa quan hệ giữa hai bảng trong Dataset. Relations.Remove() 30 5. DATASET  Có thể định nghĩa dữ liệu giữa các table để tạo các quan hệ.  DataSet được thiết kế đặc biệt để giúp quản lý dữ liệu không cần kết nối (disconnected) trên dữ liệu.  Nhờ đối tượng DataAdapter làm trung gian  DataSet là một đối tượng được dùng bởi tất cả Data Provider. 31 6. GIAO TIẾP CSDL VỚI MÔ HÌNH 1 LỚP Để load thông tin của nhân viên từ table NHANVIEN cũng như là thêm, sửa, xóa,.. thì ta cần thực hiện như sau 32 6. GIAO TIẾP CSDL VỚI MÔ HÌNH 1 LỚP 33 6. GIAO TIẾP CSDL VỚI MÔ HÌNH 1 LỚP 34 6. GIAO TIẾP CSDL VỚI MÔ HÌNH 1 LỚP  Qua đây, chúng ta thấy rằng khi dùng mô hình 1 lớp kết nối CSDL thì không có sự phân loại trong khi cài đặt.  Code xử lý CSDL, code xử lý nghiệp vụ và code xử lý thể hiện nằm chung với nhau, làm chương trình rất khó quản lý.  Để khắc phục các nhược điểm trên, chúng ta chuyển sang mô hình 3 lớp 35 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Ta xây dựng 3 lớp như sau cho NHANVIEN:  Lớp thao tác CSDL : Database.cs  Lớp xử lý nghiệp vụ : NhanVien.cs  Lớp xử lý giao diện : frmNhanvien.cs 36 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Bước 1: Xây dựng lớp thao tác CSDL Database.cs  Chức năng: Lớp Database đảm nhiệm việc giao tiếp với cơ sở dữ liệu cho toàn ứng dụng. Tất cả việc tương tác với CSDL dữ liệu diễn ra ở bất cứ nơi nào trong ứng dụng đều được thực hiện thông qua lớp này.  Mục đích: Sở dĩ chúng ta phải xây dựng lớp này là nhằm mang lại tính dễ bảo trì cũng như tính tiến hóa cho hệ thống. Nếu sau này cần thay đổi môi trường ứng dụng (sang Oracle, Access, Db2 ...) thì chúng ta chỉ việc chỉnh sửa lớp Database này mà không cần quan tâm đến phần còn lại của ứng dụng 37 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Thuộc tính Ý nghĩa sqlconn Thuộc lớp SqlConnection Phương thức Ý nghĩa Database Hàm khởi tạo (Constructor) Execute Thực thi một câu lệnh truy vấn và trả về kết quả là một DataTable. Dùng cho các câu lệnh Select ... ExecuteNonQuery Thực thi một câu lệnh không quan tâm đến kết quả trả về. Dùng cho các câu lệnh Insert, Delete, Update ... 38 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Right-Click project ThuVien, chọn Add  Class 39 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Nhập vào tên lớp là Database.cs và click Add. 40 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Viết code cho Database.cs như sau: 41 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 42 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Bước 2 : Xây dựng lớp xử lý nghiệp vụ cho Nhân viên: Nhanvien.cs 43 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 44 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP Bước 3: Xây dựng lớp xử lý giao diện cho frmNhanVien.cs Thiết kế giao diện như sau, đặt tên là frmNhanVien 45 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 46 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 47 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 48 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 49 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 50 7. GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP 51