Xây dựng phần mềm hướng đối tượng - Hướng dẫn thực hành tuần 3: ADO.NET
Đểthao tác trên cơsởdữliệu sửdụng ADO.NET ta cần có các đối tượng sau:
o Connection đểkết nối với cơsởdữliệu.gồm OleDbConnection và
SqlConnection.
o Command đểthực thi các câu lệnh truy vấn, thực thi các store procedure. bao
gồm OleDbCommand và SqlCommand
o DataAdapter thực hiện ánh xạdữliệu vào DataSet thông qua connection đã có
bao gồm OleDbDataAdapter và SqlDataAdapter.
o DataSet chứa dữliệu thu được hoặc xửlý lấy từcơsởdữliệu. DataSet là tập
hợp gồm các thành phần DataTable (tương ứng với từng View trong cơsởdữ
liệu), DataColumn (tương ứng với Field trong CSDL) và DataRow (tương ứng
với record trong CSDL).
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng HƯỚNG DẪN THỰC HÀNH TUẦN 3 Chủ đề: ADO.NET Phần 1: Các thao tác kết nối ADO.NET sử dụng cấu trúc dòng lệnh với namespace System.Data. 1. Thiết kế CSDL: a. Mở ứng dụng Microsoft Access b. Thiết kế CSDL, đặt tên QLHOCSINH.mdb: HOCSINH STT Tên trường Kiểu dữ liệu 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 Kiểu dữ liệu Ghi chú 1 MaLop Text(10) PrimaryKey 2 TenLop Text(255) 3 SiSo Number 2. Thiết kế giao diện: Tạo project C# Window Application mới với tên project là QLHS Thiết kế Form “Nhập thông tin học sinh” như màn hình sau: Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng Tạo kết nối cơ sở dữ liệu bằng dòng lệnh - Để thao tác trên cơ sở dữ liệu sử dụng ADO.NET ta cần có các đối tượng sau: o Connection để kết nối với cơ sở dữ liệu.gồm OleDbConnection và SqlConnection. o Command để thực thi các câu lệnh truy vấn, thực thi các store procedure... bao gồm OleDbCommand và SqlCommand o DataAdapter thực hiện ánh xạ dữ liệu vào DataSet thông qua connection đã có bao gồm OleDbDataAdapter và SqlDataAdapter. o DataSet chứa dữ liệu thu được hoặc xử lý lấy từ cơ sở dữ liệu. DataSet là tập hợp gồm các thành phần DataTable (tương ứng với từng View trong cơ sở dữ liệu), DataColumn (tương ứng với Field trong CSDL) và DataRow (tương ứng với record trong CSDL). - Để kết nối với CSDL Access, ta sử dụng OleDb. Ta khai báo sử dụng namespace như sau: using System.Data; using System.Data.OleDb; - Ta khai báo các biến cần sử dụng để xử lý CSDL. private OleDbConnection connection; private OleDbDataAdapter adapter; private DataSet dataSet; private OleDbCommand command; Hàm connect cơ sở dữ liệu - Ta viết hàm connect có nhiệm vụ kết nối cơ sở dữ liệu như sau: private void connect(string file) { Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng string connnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + file; connection = new OleDbConnection(connnectionString); } - Trong sự kiện form load, ta gọi hàm connect để khởi tạo connection private void Form1_Load(object sender, EventArgs e) { connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb"); } Hàm lấy danh sách lớp để kết với combobox private DataTable getDSLop() { adapter = new OleDbDataAdapter("select * from LOP", connection); dataSet = new DataSet(); adapter.Fill(dataSet); return dataSet.Tables[0]; } - Trong sự kiện formLoad, ta gọi hàm lấy danh sách lớp 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ữ liệu vào comboBox Lớp cboLop.DataSource = getDSLop(); // Column sẽ được hiển thị cboLop.DisplayMember = "TenLop"; // Column sẽ được giữ giá trị cboLop.ValueMember = "MaLop"; } Lấy 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 lấy 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ữ liệu vào CSDL private void insert() { connection.Open(); string insertCommand = "INSERT INTO HOCSINH VALUES('" + maHS + "', '" + Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng tenHS + "', '" + ngaysinh.ToShortDateString() + "', '" + diachi + "', " + dtb + ", '" + malop + "')"; command = new OleDbCommand(insertCommand, connection); command.ExecuteNonQuery(); connection.Close(); } - Trong sự kiện Click của btnLuu ta thực hiện 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ữ liệu khỏi CSDL - Tương tự ta có hàm xóa dữ liệu private void delete() { connection.Open(); string deleteCommand = "DELETE FROM HOCSINH WHERE MaHS = '"+maHS+"'"; command = new OleDbCommand(deleteCommand, connection); command.ExecuteNonQuery(); connection.Close(); } - Trong sự kiện Click của btnXoa ta thực hiện 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 tập: a. Kiểm tra dữ liệu nhập hợp lệ: i. Mã học sinh và tên học sinh phải khác null ii. Điểm trung bình phải nhập giá trị số iii. … b. Thực hiện chức năng khi người dùng nhập mã HS đã có, chương trình sẽ hiển thị thông tin HS cho phép người nhập sửa đổi và lưu lại thông tin HS đã được sửa. c. Để ngăn chặn khả năng phát sinh lỗi ??? Không cho phép nhập các ký tự không phải là ký tự số vào textbox “Điểm trung bình” Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng Giải pháp ??? Xử lý sự kiện nhấp phím (KeyPress) cho textbox “Điểm trung bình” d. Khi nhập dữ liệu cho một control xong, người dùng muốn chuyển qua contol tiếp theo để nhập liệu thì phải nhấn phím “tab” để chuyển focus sang control kế tiếp. Tuy nhiên, đối với nhiều người dùng, họ lại quen với thao tác nhấn phím “Enter” để chuyển qua control tiếp theo Giải pháp??? Hướng dẫn: xử lý sự kiện KeyPress của control tương ứng Khi người dùng nhấn một phím, kiểm tra xem phím đó có phải là phím “Enter” không? Nếu là phím “Enter” thì gửi phím “TAB” private void txtMaHS_KeyPress(object sender, KeyPressEventArgs e) { //Nếu nhấn phím enter if (e.KeyChar == 13) SendKeys.Send("{TAB}"); } e. Sinh viên tự phát triển tiếp để hoàn thiện chương trình trên
File đính kèm:
- Xây dựng phần mềm hướng đối tượng - Hướng dẫn thực hành tuần 3 ADO.NET.pdf