You are on page 1of 58

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
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
Lập trình giao diện - ứng dụng gồm nhiều form 3
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

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

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

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
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
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
Kiến trúc không kết nối

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

Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 12
Các loại Data provider

Các data provider được đặt trong các namespace khác nhau
Provider Namespace
SQL Server System.Data.SqlClient
OLE DB System.Data.OleDb
ODBC System.Data.Odbc
Oracle System.Data.OracleClient

Các lớp cho các data provider


Object SQL Server OLE DB ODBC Oracle
Connection SqlConnection OleDbConnection OdbcConnection OracleConnection
Command SqlCommand OleDbCommand OdbcCommand OracleCommand
Data reader SqlDataReader OldeDbDataReader OdbcDataReader OracleDataReader
Data SqlDataAdapter OleDbDataAdapter OdbcDataAdapter OracleDataAdapter
adapter
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 13
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
SqlConnection
Thực hiện kết nối với CSDL
Phương thức khởi tạo
new SqlConnection()
new SqlConnection(chuỗi-kết-nối)
Thuộc tính và phương thức
Thuộc tính/Phương thức Mô tả

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

Các giá trị trên chuỗi 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
Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 15
SqlDataAdapter

DataAdapter hoạt động như cầu nối giữa dataset và


CSDL

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

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


new SqlDataAdapter()
new SqlDataAdapter(lệnh-truy-vấn, Connection)
Thuộc tính
Thuộc tính Mô tả
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

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

Phương thức
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
Demo thao tác với
dữ liệu bằng kiến trúc không kết nối
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

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

Lập trình với CSDL - ADO.Net & Kiến trúc không kết nối 20
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
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
ỨNG DỤNG
GỒM NHIỀU FORM

Lập trình giao diện - ứng dụng gồm nhiều form 23


Chạy thử ứng dụng Payment

Ứ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

Lập trình giao diện - ứng dụng gồm nhiều form 24


Thêm form vào Project

Có thể thêm một form mới hoặc một form có sẵn vào
Project

Thêm một form mới

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

Lập trình giao diện - ứng dụng gồm nhiều form 25


Demo thêm form Payment vào Project

Thêm form frmPayment và thiết kế như sau

Lập trình giao diện - ứng dụng gồm nhiều form 26


Hiển thị form đầu tiên của Project

Khi ứng dụng nhiều form chạy, theo mặc định ứng dụng
sẽ tải form được tạo đầu tiên trước
Đối với ứng dụng nhiều form, với form này gọi form kia.
Có thể lập trình viên muốn chạy từng form để kiểm thử
từng form

Lập trình giao diện - ứng dụng gồm nhiều form 27


Demo hiển thị form đầu tiên của Project

Thông tin về form được tải đầu tiên của project được lưu
trong file Program.cs

static void Main() Mặc định frmCustomer được load


{ trước tiên
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmCustomer());
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmPayment());
}
frmPayment được load trước tiên
Lập trình giao diện - ứng dụng gồm nhiều form 28
Hiển thị form mới

Có hai cách hiển thị form mới


Hiển thị theo kiểu dialog: Người dùng phải thao tác với
form mới này trước tiên
Hiển thị thông thường: Người dùng có thể thao tác với
form tùy ý
Cách hiển thị form mới
B1. Sử dụng từ khóa new để tạo form mới
B2. Sử dụng phương thức ShowDialog hoặc Show của
form mới để hiển thị form
Form paymentForm = new frmPayment();
paymentForm.ShowDialog(); //Hiển thị form dialog

paymentForm.Show(); //Hiển thị form thông thường

Lập trình giao diện - ứng dụng gồm nhiều form 29


Demo hiển thị form Payment

Demo hiển thị form Payment khi người dùng nhấn vào
button Select Payment trên form Customer

private void btnSelectPayment_Click(object sender, System.EventArgs e)


{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
}

Lập trình giao diện - ứng dụng gồm nhiều form 30


Lấy phản hồi của người dùng từ Dialog

Form Dialog được tạo sẵn


DialogResult result = MessageBox.Show("Bạn muốn xóa không", "Xóa",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result==DialogResult.OK)
{
//Đoạn mã xóa dữ liệu
}
Form Dialog tự tạo
Xử lý sự kiện cho các button trên form dialog tự tạo
Thiết lập giá trị cho thuộc tính DialogResult
this.DialogResult = DialogResult.OK;

Lập trình giao diện - ứng dụng gồm nhiều form 31


Demo lấy phản hồi từ form Payment
Form Payment
private void btnOK_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
Form Customer
private void btnSelectPayment_Click(object sender, System.EventArgs
{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
if (selectedButton == DialogResult.OK)
{
MessageBox.Show("Bạn vừa chọn OK");
}
} diện - ứng dụng gồm nhiều form
Lập trình giao 32
Truyền dữ liệu giữa các form

Form cung cấp thuộc tính Tag để lưu đối tượng chứa dữ
liệu của form
Cũng có thể tự khai báo thuộc tính bất kỳ để lưu dữ liệu
cho form và truyền cho form khác bằng cách truy cập
đến thuộc tính đó trên form khác

Lập trình giao diện - ứng dụng gồm nhiều form 33


Demo truyền dữ liệu
từ form Payment cho form Customer
Form Payment
private void btnOK_Click(object sender, EventArgs e)
{
string msg = null;
//Đoạn mã gán dữ liệu của form cho biến msg
//…
this.Tag = msg;
this.DialogResult = DialogResult.OK;
}
Form Customer
private void btnSelectPayment_Click(object sender,
System.EventArgs e)
{
Form paymentForm = new frmPayment();
DialogResult selectedButton = paymentForm.ShowDialog();
if (selectedButton == DialogResult.OK)
{
lblPayment.Text = (string) paymentForm.Tag;
}
}
Lập trình giao diện - ứng dụng gồm nhiều form 34
Sự kiện FormClosing

Sự kiện xẩy ra khi người dùng nhấn vào button gọi đến
phương thức Close của form nhưng trước khi form được
đóng thực sự
Sự kiện này thường được dùng để ngăn người dùng
đóng form chứa dữ liệu chưa được lưu
private void frmCustomer_FormClosing(object sender,
FormClosingEventArgs e)
{
//Viết mã ở đây
}

Nếu muốn đóng form, thiết lập e.Cancel = false (mặc


định)
Nếu muốn hủy lệnh đóng form, thiết lập e.Cancel = true

Lập trình giao diện - ứng dụng gồm nhiều form 35


Demo xử lý sự kiện
FormClosing cho frmCustomer
private void frmCustomer_FormClosing(object sender,
FormClosingEventArgs e)
{
if (isDataSaved == false)
{
string message =
"This form contains unsaved data.\n\n" +
"Do you want to save it?";
DialogResult button =
MessageBox.Show(message, "Customer",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning);
if (button == DialogResult.Yes)
{
//Đoạn mã lưu dữ liệu
}
if (button == DialogResult.Cancel)
{
e.Cancel = true;
}
Lập trình giao diện - ứng dụng gồm nhiều form 36
}
}
Ứng dụng SDI

Ứng dụng SDI (single document interface – giao diện


đơn tài liệu) là ứng dụng
gồm nhiều form độc lập với nhau
mỗi form có thể có menu và toolbar riêng
mỗi form chạy trên một cửa sổ riêng
Với loại ứng dụng này cần có một form chính cung cấp
truy cập đến các form khác của ứng dụng

Lập trình giao diện - ứng dụng gồm nhiều form 37


Chạy thử
ứng dụng SDI Financial Calculation

Form chính

Lập trình giao diện - ứng dụng gồm nhiều form 38


Demo gọi đến các form từ form chính

Gọi đến form frmFutureValue khi nhấn vào button


Calculate Future Value trên form frmMain
private void btnFutureValue_Click(object sender, System.EventArgs e)
{
Form newForm = new frmFutureValue();
newForm.Show();
}

Gọi đến form frmDepreciation khi nhấn vào button


Calculate SYD Depreciation trên form frmMain
private void btnCalculateDepreciation_Click(object sender, System.Event
{
Form newForm = new frmDepreciation();
newForm.Show();
}

Lập trình giao diện - ứng dụng gồm nhiều form 39


Demo đóng form

Đóng tất cả các form (khi người dùng nhấn vào button
Exit của form chính)
private void btnExit_Click(object sender, System.EventArgs e)
{
Application.Exit();
}

Đóng từng form (khi người dùng nhấn vào button Close
của từng form)
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}

Lập trình giao diện - ứng dụng gồm nhiều form 40


Sử dụng Tab

Có thể sử dụng điều khiển Tab thay cho kiểu giao diện
SDI

Mỗi điều khiển Tab có nhiều page, có thể thêm và xóa các
page này
Sử dụng thuộc tính SelectedIndex để xác định tab nào
đang được focus
Lập trình giao diện - ứng dụng gồm nhiều form 41
Demo sử dụng điều khiển Tab

Xử lý sự kiện cho button Calculate


private void btnCalculate_Click(object sender, System.EventArgs e)
{
if (tabCalculations.SelectedIndex == 0)
DisplayFutureValue();
else if (tabCalculations.SelectedIndex == 1)
DisplayDepreciation();
}

Xử lý sự kiện SelectedIndexChanged của điều khiển Tab


private void tabCalculations_SelectedIndexChanged(object sender,
EventArgs e)
{
if (tabCalculations.SelectedIndex == 0)
txtMonthlyInvestment.Focus();
else if (tabCalculations.SelectedIndex == 1)
txtInitialCost.Focus();
}
Lập trình giao diện - ứng dụng gồm nhiều form 42
Ứng dụng MDI

MDI (multiple-document interface – giao diện đa tài liệu)


là giao diện có một form cha chứa nhiều form con
Sử dụng menu trên form cha để có thể truy cập đến các
form con

Lập trình giao diện - ứng dụng gồm nhiều form 43


Chạy thử ứng dụng
MDI Financial Calculations

Lập trình giao diện - ứng dụng gồm nhiều form 44


Tạo form cha

Trong cửa sổ Properties, thiết lập thuộc tính


IsMdiContainer của form là true

Lập trình giao diện - ứng dụng gồm nhiều form 45


Tạo form con

Viết code thiết lập thuộc tính MdiParent chỉ ra form cha
cho form con
Đoạn mã này mở form FutureValue khi người dùng nhấn
vào menu New Future Value trên form cha

private void mnuNewFutureValue_Click(object sender, System.EventArgs e)


{
Form newForm = new frmFutureValue();
newForm.MdiParent = this;
newForm.Show();
}

Lập trình giao diện - ứng dụng gồm nhiều form 46


Đóng form con đang được kích hoạt

Sử dụng thuộc tính ActiveMdiChild để lấy tham chiếu


đến form con đang được kích hoạt

private void mnuClose_Click(object sender, System.EventArgs e)


{
Form activeForm = this.ActiveMdiChild;
if (activeForm != null)
activeForm.Close();
}

Lập trình giao diện - ứng dụng gồm nhiều form 47


Sắp xếp các form con

Sử dụng phương thức LayoutMdi(KieuLayOut) để sắp


xếp các form con
Có các kiểu sắp xếp như Cascade, TileVertical,
TileHorizontal…

private void mnuCascade_Click(object sender, System.EventArgs e)


{
this.LayoutMdi(MdiLayout.Cascade);
}

Lập trình giao diện - ứng dụng gồm nhiều form 48


Hiển thị danh sách
của tất cả các form con đang được mở
Thiết lập thuộc tính MDIWindowListItem của điều khiển
MenuStrip cho menu muốn hiển thị

Lập trình giao diện - ứng dụng gồm nhiều form 49


NÂNG CẤP ỨNG DỤNG FINANCIAL CALCULATION

Thêm menu riêng cho mỗi form con


Thêm menu riêng cho form con giống như thêm menu
cho form thông thường
Menu này sẽ được thêm vào sau thanh menu của form
cha khi menu con được kích hoạt

Lập trình giao diện - ứng dụng gồm nhiều form 50


Thêm Toolbar

Toolbar được dùng để chứa các công cụ cho form

ToolStrip ToolStrip

Sử dụng điều khiển ToolStrip

Lập trình giao diện - ứng dụng gồm nhiều form 51


Demo Thêm Toolbar

Có thể thêm Toolbar tiêu chuẩn hoặc Toolbar tùy chỉnh

Tạo Toolbar tiêu chuẩn

Tạo Toolbar tùy chỉnh

Lập trình giao diện - ứng dụng gồm nhiều form 52


Thêm Tool vào Toolbar

B1. Chọn kiểu Tool B2. Thêm Tool

B3. Thiết lập


ảnh đại diện
cho Tool

B4. Thiết lập


văn bản giải
thích mục đích
của Tool

Lập trình giao diện - ứng dụng gồm nhiều form 53


Demo thêm Toolbar
Nhấn vào button đầu tiên trên Toolbar để hiển thị form
Future Value

//Hoặc là

Lập trình giao diện - ứng dụng gồm nhiều form 54


Thêm Tooltip
Tooltip được sử dụng để giải thích ý nghĩa cho các điều
khiển trên form khi người dùng di chuột lên điều khiển

Khi thêm Tooltip vào form (theo mặc định có tên là


toolTip1), tất cả điều khiển đều có thêm thuộc tính
Tooltip on toolTip1
Thuộc tính ToolTip on
toolTip1 được thêm vào
các điều khiển
Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển
hoặc cho form
Lập trình giao diện - ứng dụng gồm nhiều form 55
Trợ giúp theo ngữ cảnh
Trợ giúp theo ngữ cảnh sẽ
hiển thị văn bản trợ giúp cho
điều khiển được focus khi
người dùng nhấn F1

Khi thêm HelpProvider vào


form (theo mặc định có tên là
helpProvider1), tất cả điều
khiển đều có thêm thuộc tính Thuộc tính HelpString on helpProvider1
HelpString on helpProvider1 được thêm vào các điều khiển

Thiết lập giá trị cho thuộc tính này cho mỗi điều khiển hoặc
cho form
Lập trình giao diện - ứng dụng gồm nhiều form 56
Tổng kết bài học
ADO.NET gồm hai phần data provider và dataset
.NET data provider cung cấp các lớp để kết nối, thực thi lệnh SQL
và lấy kết quả trả về
Dataset lưu trữ bản sao của CSDL hoặc một phần 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
Data provider gồm 4 thành phần chính là Connection,
Command, DataReader và DataAdapter
Command và DataReader thực hiện theo kiến trúc kết nối, nên
phải mở và đóng kết nối trước vào sau khi thao tác
DataAdapter thực hiện theo cơ chế không kết nối, đối tượng này
tự động mở và đóng kết nối khi cần thiết
Tổng kết bài học

Một ứng dụng có thể bao gồm nhiều form. Từ một form
có thể mở form mới theo kiểu form thông thường hoặc
dialog
Đối với form dialog, khi mở form có giá trị trả về kiểu
DialogResult cho biết thao tác của người dùng trên form
Ứng dụng SDI gồm nhiều form độc lập với nhau, mỗi
form có thể có menu và toolbar riêng và mỗi form chạy
trên một cửa sổ riêng
Ứng dụng SDI này cần có một form chính cung cấp truy
cập đến các form khác của ứng dụng
Ứng dụng MDI là giao diện có một form cha chứa nhiều
form con

Lập trình giao diện - ứng dụng gồm nhiều form 58

You might also like