Bài giảng Lập trình trên môi trường Window - Chương 6: Các đối tượng trong ADO.NET cung cấp cho người học các kiến thức Đối tượng Connection, đối tượng Command, đối tượng DataReadder, giao tiếp CSDL theo mô hình 1 lớp,... Mời các bạn cùng tham khảo nội dung chi tiết.
Trang 11
Trang 2NỘ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
Trang 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
Trang 55
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
Trang 61 ĐỐ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
Tạo kết nối với SQLServer (cách 1)
Trang 77
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)
Trang 8using 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
Trang 9SqlConnection 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;
Trang 102 ĐỐ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ẻ để
Trang 11 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
Trang 12SqlConnection 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();
2 ĐỐI TƯỢNG COMMAND
SQL Command với câu lệnh Select
Trang 1313
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
Trang 143 ĐỐ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
Trang 15 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)
Trang 163 ĐỐ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
Trang 1717
3 ĐỐI TƯỢNG DATAREADER
SqlCommand cmd = new SqlCommand();
Trang 184 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
Trang 19dữ 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
Trang 20new 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
Trang 2121
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
Trang 224 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
Trang 244 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(<mảng dòng>): Cập nhật các dòng (Các đối tượng DataRow) vào nguồn dữ liệu
Update(<Dataset>): 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(<DataTable>): Cập nhật tất cả các thay đổi trên DataTable vào nguồn dữ liệu
Update(<Dataset>,<Tên bảng>) Cập nhật các
Trang 2929
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(<DataColumn trên bảng cha>,
<Data Column trên bảng con>)
Xóa quan hệ giữa hai bảng trong Dataset
Relations.Remove(<quan hệ>)
Trang 30 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
Trang 3131
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
Trang 326 GIAO TIẾP CSDL VỚI MÔ HÌNH 1 LỚP
Trang 3333
6 GIAO TIẾP CSDL VỚI MÔ HÌNH 1 LỚP
Trang 346 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
Trang 3535
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
Trang 367 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
Trang 3737
7 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
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
Trang 387 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Right-Click project ThuVien, chọn Add Class…
Trang 3939
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
Trang 407 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Viết code cho Database.cs như sau:
Trang 4141
7 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 427 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
Trang 4343
7 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 447 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
Trang 4545
7 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 467 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 4747
7 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 487 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 4949
7 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP
Trang 507 GIAO TIẾP CSDL VỚI MÔ HÌNH 3 LỚP