1. Trang chủ
  2. » Cao đẳng - Đại học

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

47 1,3K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài 6: Lập trình với CSDL kiến trúc kết nối và buộc dữ liệu
Trường học Trường Đại học Công nghệ Thông tin - Đại học Quốc gia TP.HCM
Chuyên ngành Lập trình cơ sở dữ liệu
Thể loại Bài giảng
Thành phố TP.HCM
Định dạng
Số trang 47
Dung lượng 7,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ứng dụng sử dụng DataReader để đọc bản ghi này 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à Dat

Trang 1

Bài 6:

LẬP TRÌNH VỚI CSDL KIẾN TRÚC KẾT NỐI & BUỘC DỮ LIỆU

Trang 2

Giới thiệu về ADO.NET

Trang 4

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

THAO TÁC VỚI DỮ

LIỆU BẰNG KIẾN TRÚC KẾT NỐI

Trang 6

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

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

Trang 7

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…)

Kiến trúc kết nối

Trang 8

Thực thi các câu lệnh sql trên CSDL được kết nối đến

Thực thi các câu lệnh sql trên CSDL được kết nối đến

Thuộc 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

Trang 9

Thực thi các câu lệnh sql trên CSDL được kết nối đến

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

Thuộc tính

new SqlCommand() new SqlCommand(lệnh-sql) New SqlCommand(lệnh-sql, Connection)

Thuộc 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

Trang 10

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ả

Phương thức

Kiểu liệt kê CommandType

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 10

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ả

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

Trang 11

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

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();

Trang 12

Demo thao tác thêm một bản ghi vào bảng

private void btnAddNew_Click(object sender, EventArgs e)

Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối

private void btnAddNew_Click(object sender, EventArgs e)

Trang 13

Thao tác sử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

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

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();

Trang 14

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

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();

}

14

Trang 15

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();

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

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();

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();

Trang 16

Sử dụng ExecuteReader() khi muốn lấy dữ liệu từ CSDL

Sử dụng ExecuteNoneQuery() khi thực thi lệnh không

new SqlCommand(selectStatement, connection);

SqlDataReader custReader= selectCommand.ExecuteReader();

string deleteStatement = ("DELETE * FROM Customers ");

SqlCommand deleteCommand =

new SqlCommand(deleteStatement, connection);

SqlDataReader custReader= deleteCommand.ExecuteNoneQuery();

Sử dụng ExecuteReader() khi muốn lấy dữ liệu từ CSDL

Sử dụng ExecuteNoneQuery() khi thực thi lệnh không

truy vấn lên CSDL

Sử dụng ExecuteScalar() khi thực thi lệnh tích hợp

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 16

string deleteStatement = ("DELETE * FROM Customers ");

SqlCommand deleteCommand =

new SqlCommand(deleteStatement, connection);

SqlDataReader custReader= deleteCommand.ExecuteNoneQuery();

string sumStatement = ("SELECT SUM(InvoiceTotal) FROM Invoices");

SqlCommand sumCommand =

new SqlCommand(sumStatement, connection);

int sum= (int)sumCommand.ExecuteScalar();

Trang 17

SqlParameter chứa tham số cho SqlCommand

Phương thức khởi tạo

Thuộc tính

SqlParameter

new SqlParameter() new SqlParameter(tên, giá-trị)

Thuộc tính Mô tả

ParameterName Tên của tham số

Trang 18

Tạo tham số

Thêm tham số vào Sql Command

Demo tạo tham số

và thêm tham số và SqlCommand

SqlParameter customerIdParm = new SqlParameter();customerIdParm.ParameterName = "@CustomerId";

Thêm tham số vào Sql Command

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 18

SqlParameter customerIdParm = new SqlParameter();customerIdParm.ParameterName = "@CustomerId";

Trang 19

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ă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

Indexer/Thuộc tính/Phương thức

sqlCommand.ExecuteReader()

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

Read() Lấy giá trị tiếp theo và trả về giá trị Boolean

Trang 20

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

Trang 21

Đưa dữ liệu từ DataReader vào Listview

Trang 22

Chức năng tìm kiếm theo mã sách

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 22Sau khi tìm thấy dữ liệu được gán cho

các TextBox

Trang 23

BINDINGSOURCE BINDINGSOURCE

Trang 24

Đố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

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

BindingSource

Trang 25

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

Trang 26

Buộc dữ liệu bằng BindingSource

Demo sử dụng BindingSource

conn = new SqlConnection( “chuỗi-kết-nối");

daCustomers = new SqlDataAdapter

( "Select CustomerID, Name, City, State from Customers", conn);

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 26

conn = new SqlConnection( “chuỗi-kết-nối");

daCustomers = new SqlDataAdapter

( "Select CustomerID, Name, City, State from Customers", conn);

Trang 27

Xử lý sự kiện cho button >> (chuyển đến bản ghi cuối

Trang 28

Demo sử dụng BindingSource để lọc dữ liệu

private void cmbProductCode_SelectedIndexChanged(object sender, EventArgs e) {

string stateCode = cmbStateCode.SelectedValue.ToString();

if (stateCode != "" && stateCode !="System.Data.DataRowView")

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 28

private void cmbProductCode_SelectedIndexChanged(object sender, EventArgs e) {

string stateCode = cmbStateCode.SelectedValue.ToString();

if (stateCode != "" && stateCode !="System.Data.DataRowView")

Trang 29

FILE CONFIG FILE CONFIG

Trang 30

Mỗi lần kết nối lại phải gõ vào chuỗi kết nối

 Khi thay đổi CSDL phải sửa nhiều lần

Để thống nhất, Visual Sutudio cho phép lưu chuỗi kết nốivào file config và cung cấp các lớp để đọc chuỗi kết nối

từ file config

 Chuỗi kết nối chỉ được lưu một nơi duy nhất trên file

config

File app.config

Mỗi lần kết nối lại phải gõ vào chuỗi kết nối

 Khi thay đổi CSDL phải sửa nhiều lần

Để thống nhất, Visual Sutudio cho phép lưu chuỗi kết nốivào file config và cung cấp các lớp để đọc chuỗi kết nối

Trang 31

B1 Tạo file config

Chọn project  Add  New Item

Chọn mục Application Configuration File

Demo lưu và lấy chuỗi kết nối từ file config

Trang 32

B2 Thêm chuỗi kết nối vào file config

Demo lưu và lấy chuỗi kết nối từ file config

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

< add name =“ProductDBConnectionString"

connectionString ="Data Source=SAMSUNG-R439;Initial Catalog=ProductDB;User ID=sa;Password=123456"

< add name =“ProductDBConnectionString"

connectionString ="Data Source=SAMSUNG-R439;Initial Catalog=ProductDB;User ID=sa;Password=123456"

providerName ="System.Data.SqlClient" />

</connectionStrings>

</configuration>

Trang 33

B3 Lấy chuỗi kết nối

Lưu ý: để sửa dụng được lớp ConfigurationManager phải

add thêm assembly này vào

Vào Project  Add Reference…  chọn

SqlConnection conn = new SqlConnection(connectionString);

[ "ProductDBConnectionString"].ToString();

SqlConnection conn = new SqlConnection(connectionString);

Trang 34

xử lý sự kiện với mô

hình 3 tầng

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 34

Trang 35

Demo đọc dữ liệu từ SqlDataReader

Customer customer = new Customer();

customer.CustomerID = ( int)custReader[ "CustomerID"]; customer.Name = custReader["Name"].ToString();

customer.Address = custReader["Address"].ToString(); customer.City = custReader["City"].ToString();

Customer customer = new Customer();

customer.CustomerID = ( int)custReader[ "CustomerID"]; customer.Name = custReader["Name"].ToString();

customer.Address = custReader["Address"].ToString(); customer.City = custReader["City"].ToString();

Trang 36

Sử dụng phương thức ExecuteReader của

SqlCommand để lấy dữ liệu

Sử dụng SqlDataReader để đọc dữ liệu vào form

Sử dụng phương thức ExecuteNoneQuery của

SqlCommand để thêm, sửa, xóa dữ liệu

Demo 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 36

Trang 37

Demo ứng dụng Customer Maintenance

Trang 38

Demo xử lý sự kiện Button GetCustomer

private void btnGetCustomer_Click(object sender, EventArgs e)

new SqlCommand(selectStatement, connection);

selectCommand.Parameters.AddWithValue( "@CustomerID", customerID);

//Đọc dữ liệu và gán cho các trường

connection.Close();

}

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 38

private void btnGetCustomer_Click(object sender, EventArgs e)

new SqlCommand(selectStatement, connection);

selectCommand.Parameters.AddWithValue( "@CustomerID", customerID);

//Đọc dữ liệu và gán cho các trường

connection.Close();

}

Trang 39

Demo xử lý sự kiện trên Accept trên form Add Customer

private void btnAccept_Click(object sender, EventArgs e)

{

string name = txtName.Text;

string address = txtAddress.Text;

string city = txtCity.Text;

string state = cboStates.SelectedValue.ToString();

string zipCode = txtZipCode.Text;

SqlConnection connection = MMABooksDB.GetConnection();

string insertStatement =

"INSERT Customers " +

"(Name, Address, City, State, ZipCode) " +

"VALUES ('"+name+"','"+ address+"','"+city+"','"+

string name = txtName.Text;

string address = txtAddress.Text;

string city = txtCity.Text;

string state = cboStates.SelectedValue.ToString();

string zipCode = txtZipCode.Text;

SqlConnection connection = MMABooksDB.GetConnection();

string insertStatement =

"INSERT Customers " +

"(Name, Address, City, State, ZipCode) " +

"VALUES ('"+name+"','"+ address+"','"+city+"','"+

Trang 40

Ứng dụng được tổ chức theo mô hình 3 tầng như sau:

Tầng hiển thị: Form

Tầng xử lý nghiệp vụ: Customer, State

Tầng CSDL: CustomerDB, MMABookDB, StateDB

Tổ chức ứng dụng

Lập trình với CSDL - Kiến trúc kết nối & buộc dữ liệu 40

Trang 41

frmCustomer gọi đến lớp CustomerDB để thao tác với

Ngày đăng: 23/05/2014, 20:30

HÌNH ẢNH LIÊN QUAN

Hình 3 tầng - bài 6 lập trình với csdl kiến trúc kết nối và buộc dữ liệu
Hình 3 tầng (Trang 34)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w