Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
HƯỚNG DN THC HÀNH TUN 3
Ch đề: ADO.NET
Phn 1: Các thao tác kết ni ADO.NET s dng cu trúc dòng lnh vi
namespace System.Data.
1. Thiết kế CSDL:
a. M ng dng Microsoft Access
b. Thiết kế CSDL, đặt tên QLHOCSINH.mdb:
HOCSINH
STT Tên trường Kiu d liu Ghi chú
1 MaHS Text(10) PrimaryKey
2 TenHS Text(255)
3 NgaySinh Date/Time
4 DiaChi Text(255)
5 DTB Number
6 MaLop Text(10) ForeignKey (tham chiếu đến
Lop(MaLop)
LOP
STT Tên trường Kiu d liu Ghi chú
1 MaLop Text(10) PrimaryKey
2 TenLop Text(255)
3 SiSo Number
2. Thiết kế giao din:
To project C# Window Application mi vi tên project là QLHS
Thiết kế Form “Nhp thông tin hc sinh” như màn hình sau:
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
To kết ni cơ s d liu bng dòng lnh
- Để thao tác trên cơ s d liu s dng ADO.NET ta cn có các đối tượng sau:
o Connection để kết ni vi cơ s d liu.gm OleDbConnection và
SqlConnection.
o Command để thc thi các câu lnh truy vn, thc thi các store procedure... bao
gm OleDbCommand và SqlCommand
o DataAdapter thc hin ánh x d liu vào DataSet thông qua connection đã có
bao gm OleDbDataAdapter và SqlDataAdapter.
o DataSet cha d liu thu được hoc x lý ly t cơ s d liu. DataSet là tp
hp gm các thành phn DataTable (tương ng vi tng View trong cơ s d
liu), DataColumn (tương ng vi Field trong CSDL) và DataRow (tương ng
vi record trong CSDL).
- Để kết ni vi CSDL Access, ta s dng OleDb. Ta khai báo s dng namespace như sau:
using System.Data;
using System.Data.OleDb;
- Ta khai báo các biến cn s dng để x lý CSDL.
private OleDbConnection connection;
private OleDbDataAdapter adapter;
private DataSet dataSet;
private OleDbCommand command;
Hàm connect cơ s d liu
- Ta viết hàm connect có nhim v kết ni cơ s d liu như sau:
private void connect(string file)
{
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
string connnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" + file;
connection = new OleDbConnection(connnectionString);
}
- Trong s kin form load, ta gi hàm connect để khi to connection
private void Form1_Load(object sender, EventArgs e)
{
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
}
Hàm ly danh sách lp để kết vi combobox
private DataTable getDSLop()
{
adapter = new OleDbDataAdapter("select * from LOP", connection);
dataSet = new DataSet();
adapter.Fill(dataSet);
return dataSet.Tables[0];
}
- Trong s kin formLoad, ta gi hàm ly danh sách lp và kết vào combobox
private void Form1_Load(object sender, EventArgs e)
{
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
//Load d liu vào comboBox Lp
cboLop.DataSource = getDSLop();
// Column s được hin th
cboLop.DisplayMember = "TenLop";
// Column s được gi giá tr
cboLop.ValueMember = "MaLop";
}
Ly thông tin t form vào các biến
- Khai báo các biến sau:
private string maHS, tenHS, diachi, malop;
private double dtb;
private DateTime ngaysinh;
- Hàm ly thông tin:
private void getData()
{
maHS = txtMaHS.Text;
tenHS = txtTenHS.Text;
ngaysinh = dtpNgaySinh.Value;
diachi = txtDiaChi.Text;
malop = (string)cmbLop.SelectedValue;
dtb = Double.Parse(txtDiemTB.Text);
}
Hàm thêm d liu vào CSDL
private void insert()
{
connection.Open();
string insertCommand = "INSERT INTO HOCSINH VALUES('" +
maHS + "', '" +
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
tenHS + "', '" +
ngaysinh.ToShortDateString() + "', '" +
diachi + "', " +
dtb + ", '" +
malop + "')";
command = new OleDbCommand(insertCommand, connection);
command.ExecuteNonQuery();
connection.Close();
}
- Trong s kin Click ca btnLuu ta thc hin lưu thông tin vào CSDL
private void btnLuu_Click(object sender, EventArgs e)
{
getData();
insert();
MessageBox.Show("Cap nhat thanh cong", "Thong bao",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Hàm xóa d liu khi CSDL
- Tương t ta có hàm xóa d liu
private void delete()
{
connection.Open();
string deleteCommand = "DELETE FROM HOCSINH WHERE MaHS = '"+maHS+"'";
command = new OleDbCommand(deleteCommand, connection);
command.ExecuteNonQuery();
connection.Close();
}
- Trong s kin Click ca btnXoa ta thc hin xóa thông tin t CSDL
private void btnXoa_Click(object sender, EventArgs e)
{
getData();
delete();
MessageBox.Show("Xoa du lieu thanh cong", "Thong bao",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
3. Bài tp:
a. Kim tra d liu nhp hp l:
i. Mã hc sinh và tên hc sinh phi khác null
ii. Đim trung bình phi nhp giá tr s
iii.
b. Thc hin chc năng khi người dùng nhp mã HS đã có, chương trình s hin th
thông tin HS cho phép người nhp sa đổi và lưu li thông tin HS đã được sa.
c. Để ngăn chn kh năng phát sinh li ???
Không cho phép nhp các ký t không phi là ký t s vào textbox “Đim trung
bình”
Xây dng phn mm hướng đối tượng GVHD: Trn Anh Dũng
Gii pháp ???
X lý s kin nhp phím (KeyPress) cho textbox “Đim trung bình”
d. Khi nhp d liu cho mt control xong, người dùng mun chuyn qua contol tiếp
theo để nhp liu thì phi nhn phím “tab” để chuyn focus sang control kế tiếp.
Tuy nhiên, đối vi nhiu người dùng, h li quen vi thao tác nhn phím “Enter”
để chuyn qua control tiếp theo
Gii pháp???
Hướng dn: x lý s kin KeyPress ca control tương ng
Khi người dùng nhn mt phím, kim tra xem phím đó có phi là phím “Enter”
không? Nếu là phím “Enter” thì gi phím “TAB”
private void txtMaHS_KeyPress(object sender, KeyPressEventArgs e)
{
//Nếu nhn phím enter
if (e.KeyChar == 13)
SendKeys.Send("{TAB}");
}
e. Sinh viên t phát trin tiếp để hoàn thin chương trình trên