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

bài 4 lập trình với csdl ado.net và kiến trúc không kết nối và lập tình giao diện

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 (12 MB, 58 trang )

Bài 4:
LẬP TRÌNH VỚI CSDL
ADO.NET & KIẾN TRÚC KHÔNG KẾT NỐI
& LẬP TRÌNH GIAO DIỆN
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Hệ thống bài cũ
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Lập trình giao diện - ứng dụng gồm nhiều form
2
Mục tiêu bài họ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
Ứng dụng nhiều form
Ứng dụng SDI
Ứng dụng MDI
Thêm Toolbar, Tooltip vào form
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
Ứng dụng nhiều form
Ứng dụng SDI
Ứng dụng MDI
Thêm Toolbar, Tooltip vào form
Lập trình giao diện - ứng dụng gồm nhiều form
3
ADO.NET (ActiveX Data Objects .NET) là một thành
phần trong .NET Framework đảm nhiệm vai trò thao
tác với CSDL
ADO.NET
ADO.NET (ActiveX Data Objects .NET) là một thành
phần trong .NET Framework đảm nhiệm vai trò thao
tác với CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
4

ADO.NET là cầu nối giữa ứng dụng và CSDL
ADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trị
CSDL như SQL Server, Microsoft Access, Oracle…
ADO.NET
ADO.NET là cầu nối giữa ứng dụng và CSDL
ADO.NET hỗ trợ các lập trình viên kết nối với hệ quản trị
CSDL như SQL Server, Microsoft Access, Oracle…
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
5
Hỗ trợ lập trình
Cung cấp các lớp thao tác với CSDL giúp lập trình viên lập
trình nhanh hơn và giảm bớt lỗi
Cung cấp các công cụ để thao tác với CSDL ngay trên
phần Designer giúp lập trình viên tương tác với CSDL mà
không cần hiểu sâu về CSDL
Khả năng mở rộng
Sử dụng kiến trúc không kết nối chỉ kết nối với dữ liệu
lúc khi cần thiết nên giảm tải cho server CSDL  Ứng
dụng có thể đáp ứng nhiều người dùng hơn
Khả năng tích hợp
ADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗ
trợ XML
Tính năng của ADO.NET
Hỗ trợ lập trình
Cung cấp các lớp thao tác với CSDL giúp lập trình viên lập
trình nhanh hơn và giảm bớt lỗi
Cung cấp các công cụ để thao tác với CSDL ngay trên
phần Designer giúp lập trình viên tương tác với CSDL mà
không cần hiểu sâu về CSDL
Khả năng mở rộng

Sử dụng kiến trúc không kết nối chỉ kết nối với dữ liệu
lúc khi cần thiết nên giảm tải cho server CSDL  Ứng
dụng có thể đáp ứng nhiều người dùng hơn
Khả năng tích hợp
ADO.NET có thể gửi dữ liệu cho bất cứ ứng dụng nào hỗ
trợ XML
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
6
Kiến trúc không kết nối
Kết nối được thiết lập và tạo một bản sao của CSDL ngay
trên máy tính, sau đó kết nối được đóng
Thao tác với bản sao và update lại CSDL khi cần thiết
Ưu điểm
Tiết kiệm tài nguyên
Bảo mật vì kết nối được mở trong thời gian ngắn
Kiến trúc không kết nối
Kiến trúc không kết nối
Kết nối được thiết lập và tạo một bản sao của CSDL ngay
trên máy tính, sau đó kết nối được đóng
Thao tác với bản sao và update lại CSDL khi cần thiết
Ưu điểm
Tiết kiệm tài nguyên
Bảo mật vì kết nối được mở trong thời gian ngắn
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
7
ADO gồm hai phần
.NET data provider: cung cấp các lớp để kết nối, thực thi
lệnh SQL trên CSDL và lấy kết quả trả về
Dataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấp
các phương thức cho phép ứng dụng thao tác với bản sao

Các thành phần chính của ADO.NET
ADO gồm hai phần
.NET data provider: cung cấp các lớp để kết nối, thực thi
lệnh SQL trên CSDL và lấy kết quả trả về
Dataset: lưu trữ bản sao của CSDL trên bộ nhớ. Cung cấp
các phương thức cho phép ứng dụng thao tác với bản sao
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
8
Data provider cung cấp các lớp để tương tác với CSDL
Data provider gồm 4 thành phần chính
Connection: kết nối với CSDL
Command: thực thi các lệnh sql để lấy dữ liệu từ CSDL
hoặc thay đổi CSDL
DataReader: đọc dữ liệu tuần tự từ CSDL
DataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cập
nhật CSDL
Data provider
Data provider cung cấp các lớp để tương tác với CSDL
Data provider gồm 4 thành phần chính
Connection: kết nối với CSDL
Command: thực thi các lệnh sql để lấy dữ liệu từ CSDL
hoặc thay đổi CSDL
DataReader: đọc dữ liệu tuần tự từ CSDL
DataAdapter: lấy dữ liệu từ CSDL lưu vào dataset và cập
nhật CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
9
Ví dụ thực tiễn
Vấn đề: Một ngân hàng đa quốc gia có rất nhiều chi
nhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cập

thông tin.
Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộ
dưới dạng dataset
Dataset là bản sao của CSDL hay một phần CSDL trên
bộ nhớ
DataSet Hỗ trợ kiến trúc không kết nối
Kết nối đến CSDL chỉ được mở khi lấy dữ liệu về dataset
và cập nhật dữ liệu trở lại CSDL
Mọi thao tác sẽ được thực hiện trên DataSet
DataSet không phụ thuộc vào loại CSDL
Dataset
Ví dụ thực tiễn
Vấn đề: Một ngân hàng đa quốc gia có rất nhiều chi
nhánh. Giả sử một chi nhánh ở Việt Nam muốn truy cập
thông tin.
Giải pháp: Lấy thông tin cần thiết và lưu vào máy cục bộ
dưới dạng dataset
Dataset là bản sao của CSDL hay một phần CSDL trên
bộ nhớ
DataSet Hỗ trợ kiến trúc không kết nối
Kết nối đến CSDL chỉ được mở khi lấy dữ liệu về dataset
và cập nhật dữ liệu trở lại CSDL
Mọi thao tác sẽ được thực hiện trên DataSet
DataSet không phụ thuộc vào loại CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
10
Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữ
liệu
Mỗi dataset gồm nhiều bảng
Các bảng có ràng buộc với nhau

Mỗi bảng có nhiều dòng và cột
Mỗi cột có nhiều dòng
Mỗi dòng có nhiều cột
DataSet
Cấu trúc của DataSet giống hệt cấu trúc của cơ sở dữ
liệu
Mỗi dataset gồm nhiều bảng
Các bảng có ràng buộc với nhau
Mỗi bảng có nhiều dòng và cột
Mỗi cột có nhiều dòng
Mỗi dòng có nhiều cột
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
11
DataAdapter kết nối với CSDL thông qua Connection, lấy
dữ liệu lưu vào DataSet.
Ứng dụng sẽ lấy và thay đổi dữ liệu trên DataSet
DataAdapter kết nối với CSDL thông qua Connection và
cập nhật lại CSDL
Kiến trúc không kết nối
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
12
Các data provider được đặt trong các namespace khác nhau
Các lớp cho các data provider
Các loại Data provider
Provider
Namespace
SQL Server
System.Data.SqlClient
OLE DB
System.Data.OleDb

ODBC
System.Data.Odbc
Oracle
System.Data.OracleClient
Các data provider được đặt trong các namespace khác nhau
Các lớp cho các data provider
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
13
Oracle
System.Data.OracleClient
Object SQL Server OLE DB ODBC Oracle
Connection SqlConnection OleDbConnection OdbcConnection OracleConnection
Command SqlCommand OleDbCommand OdbcCommand OracleCommand
Data reader SqlDataReader OldeDbDataReader OdbcDataReader OracleDataReader
Data
adapter
SqlDataAdapter OleDbDataAdapter OdbcDataAdapter OracleDataAdapter
Các lớp của các loại data provider về cơ bản giống
nhau vì cùng kế thừa từ một lớp
Ví dụ OleDbDataAdpater và SqlDataAdapter cùng
kế thừa từ lớp DbDataAdapter
Với môn này sẽ học về SQL data provider để thao tác với
CSDL Microsoft SQL Server 2008
Các loại Data provider
Các lớp của các loại data provider về cơ bản giống
nhau vì cùng kế thừa từ một lớp
Ví dụ OleDbDataAdpater và SqlDataAdapter cùng
kế thừa từ lớp DbDataAdapter
Với môn này sẽ học về SQL data provider để thao tác với
CSDL Microsoft SQL Server 2008

Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
14
Thực hiện kết nối với CSDL
Phương thức khởi tạo
Thuộc tính và phương thức
Các giá trị trên chuỗi kết nối
SqlConnection
new SqlConnection()
new SqlConnection(chuỗi-kết-nối)
Thuộc tính/Phương thức Mô tả
ConnectionString
Cung cấp thông tin để truy cập đến CSDL SQL Server
Thực hiện kết nối với CSDL
Phương thức khởi tạo
Thuộc tính và phương thức
Các giá trị trên chuỗi kết nối
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
15
ConnectionString
Cung cấp thông tin để truy cập đến CSDL SQL Server
Open()
Mở kết nối
Close()
Đóng kết nối
Giá trị Mô tả
Data source/Server Tên Server CSDL
Initial catalog/DataBase
Tên của CSDL
UserID
Tên của user đăng nhập vào CSDL

DataAdapter hoạt động như cầu nối giữa dataset và
CSDL
SqlDataAdapter
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
16
Phương thức khởi tạo
Thuộc tính
SqlDataAdapter
new SqlDataAdapter()
new SqlDataAdapter(lệnh-truy-vấn, Connection)
Thuộc tính
Mô tả
DeleteCommand
Lệnh sql hoặc sp để xóa dữ
liệu từ dataset
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
17
DeleteCommand
Lệnh sql hoặc sp để xóa dữ
liệu từ dataset
SelectCommand
Lệnh sql hoặc sp để lấy dữ
liệu từ dataset
InsertCommand
Lệnh sql hoặc sp để thêm dữ
liệu vào dataset
UpdateCommand
Lệnh sql hoặc sp để cập nhật
dữ liệu cho dataset
Phương thức

SqlDataAdapter
Phương thức
Mô tả
Fill (dataset)
Lấy dữ liệu đổ vào dataset
Update(dataset)
Cập nhật những dữ liệu thay
đổi trên dataset lên CSDL
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
18
Sử dụng phương thức DataAdapter để fill Dataset
Đọc dữ liệu vào form từ Dataset
Thay đổi dữ liệu trên Dataset
Update lại dữ liệu trên CSDL
Demo thao tác với
dữ liệu bằng kiến trúc không kết nối
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
19
Các bước thực hiện Lập trình cơ sở dữ liệu
1. Khai báo các biến
SqlConnection conn; // biến connection kết nối đến CSDL
SqlCommand com; // thực thi các lệnh sql để lấy dữ liệu từ hoặc là thay
//đổi CSDL
SqlDataAdapter da; // biến có kiểu
DataSet ds; // biến dataset
2. Khởi tạo biến
conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist Security
Info=True;User ID=sa;Password=sa");
conn.Open(); // Thực hiện mở kết nối đến CSDL
da = new SqlDataAdapter();

ds = new DataSet();
com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDL
da.SelectCommand = com;
da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
20
2. Khởi tạo biến
conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProductDB;Persist Security
Info=True;User ID=sa;Password=sa");
conn.Open(); // Thực hiện mở kết nối đến CSDL
da = new SqlDataAdapter();
ds = new DataSet();
com = new SqlCommand("Select * from Products", conn); // thực hiện truy vấn CSDL
da.SelectCommand = com;
da.Fill(ds, "Products"); // Đưa kết quả câu lệnh truy vấn vào dataset
3. Lấy 1 dòng dữ liệu trong bảng
ds.Tables[0].Rows.Count; // trả về tổng số bản ghi
ds.Tables[0].Rows[i].ItemArray[j].ToString() // Lấy cột thứ J của hàng thứ i
Demo load dữ liệu vào ListView
private void frmBookDetails_Load(object sender, EventArgs e)
{
com = new SqlCommand("Select * from Products",conn);
da.SelectCommand = com;
da.Fill(ds, "Products");
for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++)
{
lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhất
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString());

}
}
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
21
private void frmBookDetails_Load(object sender, EventArgs e)
{
com = new SqlCommand("Select * from Products",conn);
da.SelectCommand = com;
da.Fill(ds, "Products");
for (rows = 0; rows < ds.Tables[0].Rows.Count; rows++)
{
lvwBookDetails.Items.Add(ds.Tables[0].Rows[rows].ItemArray[0].ToString()); //thêm vào cột thứ nhất
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[1].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[2].ToString());
lvwBookDetails.Items[rows].SubItems.Add(ds.Tables[0].Rows[rows].ItemArray[3].ToString());
}
}
Demo hiển thị dữ liệu
khi một dòng trên ListView được chọn
private void lvwBookDetails_Click(object sender, EventArgs e)
{
int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọn
DataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọn
txtCode.Text = dr[0].ToString();
txtTitle.Text = dr[1].ToString();
txtPrice.Text = dr[2].ToString();
txtQuantity.Text = dr[3].ToString();
}
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối
22

private void lvwBookDetails_Click(object sender, EventArgs e)
{
int index = lvwBookDetails.SelectedItems[0].Index; // Dòng được chọn
DataRow dr = ds.Tables["Products"].Rows[index]; // Lấy dòng được chọn
txtCode.Text = dr[0].ToString();
txtTitle.Text = dr[1].ToString();
txtPrice.Text = dr[2].ToString();
txtQuantity.Text = dr[3].ToString();
}
ỨNG DỤNG
GỒM NHIỀU FORM
Lập trình giao diện - ứng dụng gồm nhiều form
23
ỨNG DỤNG
GỒM NHIỀU FORM
Ứng dụng Payment gồm 2 form
Form Payment được mở khi nhấn vào button Select
Payment trên form Customer
Thao tác trên form Payment mới được thao tác trên form
Customer
Chạy thử ứng dụng Payment
Lập trình giao diện - ứng dụng gồm nhiều form
24
Có thể thêm một form mới hoặc một form có sẵn vào
Project
Thêm form vào Project
Thêm một form mới
Lập trình giao diện - ứng dụng gồm nhiều form
25
Thêm một form mới

Thêm một form có sẵn

×