Bài 6:
LẬP TRÌNH VỚI CSDL
KIẾN TRÚC KẾT NỐI & BUỘC DỮ LIỆU
Hệ thống bài cũ
Giới thiệu về ADO.NET
Các thành phần của ADO.NET
DataProvider
DataSet
Các loại DataProvider
Sql Data Provider
SqlConnection
SqlDataAdapter
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
2
Mục tiêu bài học
Thao tác sử dụng kiến trúc kết nối
SqlCommand
SqlDataReader
BindingSource
Điều hướng dữ liệu
Lọc dữ liệu
File config
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
3
THAO TÁC VỚI DỮ
LIỆU BẰNG KIẾN
TRÚC KẾT NỐI
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
4
Kiến trúc kết nối
Kiến trúc kết nối
Ứng dụng kết nối với CSDL và giữ kết nối cho đến khi
được đóng
Ưu điểm: Đọc dữ liệu nhanh chóng vì kết nối trực tiếp với
CSDL
Nhược điểm: Ứng dụng vẫn kết nối với CSDL ngay cả khi
không thực hiện thao tác nào với CSDL lãng phí tài
ngun Server q tải
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
5
Kiến trúc kết nối
Truy vấn CSDL
Command kết nối với CSDL thơng qua Connection, sau đó
Command thực thi lệnh select và trả về kết quả là
DataReader chứa các bản ghi.
Ứng dụng sử dụng DataReader để đọc bản ghi này
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
6
Kiến trúc kết nối
Thay đổi CSDL
Command kết nối với CSDL thông qua đối tượng
Connection và thực thi các lệnh SQL trực tiếp trên CSDL
(lệnh insert, delete…)
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
7
SqlCommand
Thực thi các câu lệnh sql trên CSDL được kết nối đến
Hỗ trợ kiến trúc kết nối
Phương thức khởi tạo
new SqlCommand()
new SqlCommand(lệnh-sql)
New SqlCommand(lệnh-sql, Connection)
Thuộc
Thuộc tính
tính
Mơ tả
Connection
Đối tượng Connection được sử dụng để kết nối với
CSDL
CommandText
Lệnh Sql hoặc tên của stored procedure
CommandType
Tên của kiểu liệt kê CommandType sẽ xác định giá trị của
CommandText được biên dịch như thế nào
Parameters
Chứa một collection các tham số cho lệnh
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
8
SqlCommand
Thực thi các câu lệnh sql trên CSDL được kết nối đến
Hỗ trợ kiến trúc kết nối
Phương thức khởi tạo
new SqlCommand()
new SqlCommand(lệnh-sql)
New SqlCommand(lệnh-sql, Connection)
Thuộc
Thuộc tính
tính
Mơ tả
Connection
Đối tượng Connection được sử dụng để kết nối với
CSDL
CommandText
Lệnh Sql hoặc tên của stored procedure
CommandType
Tên của kiểu liệt kê CommandType sẽ xác định giá trị của
CommandText được biên dịch như thế nào
Parameters
Chứa một collection các tham số cho lệnh
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
9
SqlCommand
Phương thức
Phương thức
Mô tả
ExecuteReader()
Thực thi truy vấn trong CommandText và trả về kết quả
là SqlDataReader
ExecuteNoneQuery()
Thực thi lệnh sql được chỉ ra trong CommandText và trả
về số dòng mà lệnh này thao tác
ExecuteScalar()
Thực thi truy vấn được chỉ ra trong CommandText và trả
về cột đầu tiên của dòng đầu tiên của tập kết quả
Kiểu liệt kê CommandType
Thành viên
Mô tả
Text
CommandText chứa lệnh sql (mặc định)
StoredProcedure
CommandText chứa tên của stored procedure
TableDirect
CommandText chứa tên của bảng
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
10
Thao tác thêm một bản ghi vào bảng
1 Khai báo các biến
SqlConnection conn;
SqlCommand cmd;
2. Khởi tạo chuỗi kết nối
conn = new SqlConnection("Data Source=localhost;Initial Catalog=ProductDB;Persist Security Info=True;User
ID=sa;Password=sa");
conn.Open();
3. Khai báo câu lệnh truy vấn
String sql = "insert into products values ('B0126','Lap trinh windows',100000,16)";
4. khởi tạo đối tượng Sqlcommand
SqlCommand cmd = new SqlCommand(sql, conn);
5. Thực thi câu lệnh truy vấn
cmd.ExecuteNonQuery();
6. Có thể đóng kết nối
conn.close();
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
11
Demo thao tác thêm một bản ghi vào bảng
private void btnAddNew_Click(object sender, EventArgs e)
{
conn = new SqlConnection("Data Source=localhost;Initial Catalog=ProductDB;Persist Security
Info=True;User ID=sa;Password=sa");
conn.Open();
String sql = "insert into products values ('" + txtCode.Text + "','" + txtTitle.Text + "'," +
System.Convert.ToInt32(txtPrice.Text) + "," + System.Convert.ToInt32(txtQuantity.Text) + ")";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
12
1 Khai báo các biến
Thao tác sửa bản ghi
SqlConnection conn;
SqlCommand cmd;
2. Khởi tạo chuỗi kết nối
conn = new SqlConnection("Data Source=localhost;Initial Catalog=ProductDB;Persist Security Info=True;User
ID=sa;Password=sa");
conn.Open();
3. Khai báo câu lệnh truy vấn
String sql = "Update products set Description='Sach PHP-Nang cao', UnitPrice=56000,
OnHandQuantity=20 where ProductCode= 'S126' ";
4. khởi tạo đối tượng Sqlcommand
SqlCommand cmd = new SqlCommand(sql, conn);
5. Thực thi câu lệnh truy vấn
cmd.ExecuteNonQuery();
6. Có thể đóng kết nối
conn.close();
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
13
Thao tác sửa bản ghi
private void btnEdit_Click(object sender, EventArgs e)
{
conn = new SqlConnection("Data Source=localhost;Initial Catalog=ProductDB;Persist Security Info=True;User
ID=sa;Password=sa");
conn.Open();
String sql = "update products set Description='" + txtTitle.Text + "', UnitPrice=" +
System.Convert.ToInt32(txtPrice.Text) + ", OnHandQuantity=" + System.Convert.ToInt32(txtQuantity.Text) + " where
ProductCode='"+txtCode.Text+"'" ;
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
//conn.Close();
}
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
14
Thao tác Xóa bản ghi
1 Khai báo các biến
SqlConnection conn;
SqlCommand cmd;
2. Khởi tạo chuỗi kết nối
conn = new SqlConnection("Data Source=localhost;Initial Catalog=ProductDB;Persist Security Info=True;User
ID=sa;Password=sa");
conn.Open();
3. Khai báo câu lệnh truy vấn //
Xóa sách có Mã là S126
String sql = "Delete from products where ProductCode= 'S126' ";
4. khởi tạo đối tượng Sqlcommand
SqlCommand cmd = new SqlCommand(sql, conn);
5. Thực thi câu lệnh truy vấn
cmd.ExecuteNonQuery();
6. Có thể đóng kết nối
conn.close();
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
15
Demo sử dụng SqlCommand
Sử dụng ExecuteReader() khi muốn lấy dữ liệu từ CSDL
string selectStatement = ("SELECT * FROM Customers ");
SqlCommand selectCommand =
new SqlCommand(selectStatement, connection);
SqlDataReader custReader= selectCommand.ExecuteReader();
Sử dụng ExecuteNoneQuery() khi thực thi lệnh không
truy vấn lên CSDL
string deleteStatement = ("DELETE * FROM Customers ");
SqlCommand deleteCommand =
new SqlCommand(deleteStatement, connection);
SqlDataReader custReader= deleteCommand.ExecuteNoneQuery();
Sử dụng ExecuteScalar() khi thực thi lệnh tích hợp
string sumStatement = ("SELECT SUM(InvoiceTotal) FROM Invoices");
SqlCommand sumCommand =
new SqlCommand(sumStatement, connection);
int sum= (int)sumCommand.ExecuteScalar();
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
16
SqlParameter
SqlParameter chứa tham số cho SqlCommand
Phương thức khởi tạo
new SqlParameter()
new SqlParameter(tên, giá-trị)
Thuộc tính
Thuộc tính
Mơ tả
ParameterName
Tên của tham số
Value
Giá trị của tham số
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
17
Demo tạo tham số
và thêm tham số và SqlCommand
Tạo tham số
SqlParameter customerIdParm = new SqlParameter();
customerIdParm.ParameterName = "@CustomerId";
customerIdParm.Value = customerId;
// hoặc
SqlParameter customerIdParm2 = new SqlParameter
("@CustomerId", customerID);
Thêm tham số vào Sql Command
selectCommand.Parameters.Add(custemerIdParm);
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
18
SqlDataReader
DataReader đọc tuần tự từng dòng từ luồng dữ liệu
của CSDL
Tăng hiệu suất bởi đọc tuần tự từng dòng nhưng tốn tài
nguyên vì hỗ trợ kiến trúc kết nối
Tạo SqlDataReader
sqlCommand.ExecuteReader()
Indexer/Thuộc tính/Phương thức
Indexer/Thuộc tính/Phương thức
Mơ tả
[tên-cột]
Lấy giá trị của cột có tên được chỉ ra
[index]
Lấy giá trị của cột tại vị trí được chỉ ra
isClosed
Cho biết data reader đã đóng chưa
Close()
Đóng data reader
Read()
Lấy giá trị tiếp theo và trả về giá trị Boolean
cho biết đã kết thúc data reader hay chưa 19
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
Thứ tự làm việc với SqlDataReader
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
20
Đưa dữ liệu từ DataReader vào Listview
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
21
Chức năng tìm kiếm theo mã sách
Sau khi tìm thấy dữ liệu được gán cho
các TextBox
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
22
BINDINGSOURCE
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
23
Binding Source
Đối tượng BindingSource là cầu nối giữa CSDL và các
điều khiển trên form
BindingSource chứa nguồn dữ liệu liên kết với điều
khiển
Cung cấp nhiều phương thức vào thuộc tính để điều
hướng và lọc dữ liệu dễ dàng
BindingSource
Điều khiển
trên form
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
24
Binding Source
Thuộc tính
Thuộc tính
Mơ tả
Position
Vị trí dịng hiện tại của nguồn dữ liệu
Count
Số dòng trong nguồn dữ liệu
Filter
Thiết lập bộ lọc
Phương thức
Phương thức
Mơ tả
AddNew()
Thêm một dịng khơng có dữ liệu vào nguồn dữ liệu
EndEdit()
Lưu thay đổi của dòng hiện tại
CancelEdit()
Bỏ qua thay đổi của dịng hiện tại
RemoveCurrent()
Xóa dịng hiện tại của nguồn dữ liệu
MoveFirst()
Chuyển đến dòng đầu tiên của nguồn dữ liệu
MovePrevious()
Chuyển đến dịng trước đó
MoveNext()
Chuyển đến dịng tiếp theo
Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu
25