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ó)
51 trang |
Chia sẻ: thanhle95 | Lượt xem: 606 | Lượt tải: 1
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