Tải bản đầy đủ (.pdf) (47 trang)

bài 6 lập trình với csdl kiến trúc kết nối và buộc dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.94 MB, 47 trang )

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


×