7
Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng Hướng dẫn thực hành Môn: XDPMHDT Chủ đề: ADO.NET Phần 2: Các thao tác kết nối ADO.NET với mô hình 3 tầng 1. Mô hình 3 tầng Mục đích: 2. Thiết kế CSDL 1. Sử dụng lại cơ sở dữ liệu ở phần 1 (HOCSINH.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) 1

Thuc hanh ado.net_bai_03

Embed Size (px)

Citation preview

Page 1: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

Hướng dẫn thực hành

Môn: XDPMHDT

Chủ đề: ADO.NET

Phần 2: Các thao tác kết nối ADO.NET với mô hình 3 tầng

1. Mô hình 3 tầng

Mục đích:

2. Thiết kế CSDL

1. Sử dụng lại cơ sở dữ liệu ở phần 1 (HOCSINH.MDB):

HOCSINHSTT Tên trường Kiểu dữ liệu Ghi chú

1 MaHS Text(10) PrimaryKey2 TenHS Text(255)3 NgaySinh Date/Time4 DiaChi Text(255)5 DTB Number6 MaLop Text(10) ForeignKey (tham chiếu đến

Lop(MaLop)

1

Page 2: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

LOPSTT Tên trường Kiểu dữ liệu Ghi chú

1 MaLop Text(10) PrimaryKey2 TenLop Text(255)3 SiSo Number

Tạo project C# Window Application mới với tên project là QLHS

Mô hình 3 tầng của chương trình

3. Kết nối cơ sở dữ liệu:

Tạo lớp DataProvider để quản lý việc kết nối và truy vấn cơ sở dữ liệuViệc kết nối cơ sở dữ liệu có thể được thực hiện qua nhiều dạng Provider như SqlClient, OleDb, Odbc… Do đó, để có thể dễ dàng thay đổi Provider khi hệ quản trị cơ sở dữ liệu thay đổi, ta cần thiết lập một lớp DataProvider riêng với các hàm tương ứng.Các bước thực hiện:

- Chọn Project -> Add Class: Đặt tên cho class là DataProvider.- Ở đây ta kết nối với cơ sở dữ liệu Microsoft Access nên ta sử dụng OleDb để

kết nối. Thêm 2 dòng lệnh sau vào đầu file DataProvider.cs:

using System.Data;using System.Data.OleDb;

Với mỗi lần kết nối, ta sử dụng cùng một connectionString chung. Khai báo một biến static và một property để lưu giữ connection string xuyên suốt chương trình.

protected static string _connectionString;

2

Giao diện

Cơ sở dữ liệu

HocSinhCtl

HocSinhData

DataProvider

HocSinhInfo

Page 3: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

public static string ConnectionString{

get{

return _connectionString;}set{

_connectionString = value;}

}

Đồng thời ta cần khai báo các biến để thực hiện thao tác trên cơ sở dữ liệu bao gồm:

protected OleDbConnection connection;protected OleDbDataAdapter adapter;protected OleDbCommand command;

Tương tự như bài trước, ta viết hàm kết nối CSDL:

public void connect(){

connection = new OleDbConnection(connnectionString);}

Và hàm ngắt kết nối CSDL.public void disconnect(){

connection.Close();}

Để thực hiện truy vấn dữ liệu với câu dữ liệu có sẵn, ta tạo hàm truy vấn executeQuery để trả ra 1 DataReader

public IDataReader executeQuery(string sqlString){

command = new OleDbCommand(sqlString, connection);return command.ExecuteReader();

}

public void executeNonQuery(string sqlString){

command = new OleDbCommand(sqlString, connection);command.ExecuteNonQuery();

}

public object executeScalar(string sqlString){

command = new OleDbCommand(sqlString, connection);return command.ExecuteScalar();

}

3

Page 4: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

Tạo lớp HocSinhData để thực hiện các thao tác cập nhật cơ sở dữ liệu với dữ liệu học sinh tương ứng.Lớp HocSinhData sẽ chịu trách nhiệm thực hiện cập nhật CSDL thông qua DataProvider đã có.Mỗi đối tượng HocSinhData sẽ giữ một Data Provider để thực hiện truy xuất CSDL.public class HocSinhData{

private DataProvider _provider = new DataProvider();

public HocSinhData(){

_provider.connect();}

public void insert(string maHS, string tenHS, DateTime ngaySinh, string diachi, double diemTB, string maLop){

string insertCommand = "INSERT INTO HOCSINH VALUES('" + maHS + "', '" +tenHS + "', '" + ngaySinh.ToShortDateString() + "', '" +diachi + "', " +diemTB + ", '" +maLop + "')";

_provider.executeNonQuery(insertCommand);}

public void update(string maHS, string tenHS, DateTime ngaySinh, string diachi, double diemTB, string maLop){

……………………………………………………………………………………}

public void delete(string maHS){

……………………………………………………………………………………

}

}

4. Xử lý tính tóan:

Tạo lớp HocSinhInfo chứa các thông tin của một học sinh với ràng buộc nghiệp vụ tương ứng

Lớp HocSinhInfo chứa các thông tin lưu trữ của một đối tượng học sinh. Lớp này chỉ gồm các biến và thuộc tính (hoạt động tương tự như một struct). Đây chính là lớp truyền tải dữ liệu giữa tầng giao diện và tầng xử lý tính tóan

public class HocSinhInfo{

private string _maHS;

4

Page 5: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

private string _tenHS;private string _diachi;private DateTime _ngaysinh;private double _dtb;private string _maLop;private double _toan;private double _ly;private double _hoa;

public string MaHS{

get{return _maHS;}set{

if (value == null)throw new Exception("Ma HS khong duoc rong”);

_maHS = value;}

}public double DTB{

get{return _dtb;}set{

if (value < 0 || value >10) throw new Exception("Diem trung binh phai lon

hon 0 va nho hon 10");_dtb = value;

}}

public double Toan{

get{return _toan;}set{

if (value < 0 || value >10) throw new Exception("Diem Toan phai lon hon 0

va nho hon 10");_toan = value;

}}

}

Tương tự cho các biến và thuộc tính còn lại.

Tạo lớp HocSinhCtl để thực hiện các công việc nghiệp vụ

Trong mỗi đối tượng HocSinhCtl giữ các đối tượng HocSinhInfo và HocSinhData. Thông qua đối tượng HocSinhInfo truyền nhận dữ liệu với HocSinhData để thực hiện tương tác với tầng cơ sở dữ liệu.

public class HocSinhCtl{

private HocSinhInfo info = new HocSinhInfo();private HocSinhData data = new HocSinhData();

5

Page 6: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

public HocSinhInfo HocSinh{

get{

return info;}set{

info = value;}

}

public void insert(){

data.insert(info.MaHS, info.TenHS, info.NgaySinh, info.DiaChi, info.DTB, info.MaLop);

}

public void delete(){

data.delete(info.MaHS);}

public void update(){

data.update(info.MaHS, info.TenHS, info.NgaySinh, info.DiaChi, info.DTB, info.MaLop);

}

public void tinhDTB(){

info.DTB = ( info.Toan + info.Ly + info.Hoa ) / 3;}

}

6

Page 7: Thuc hanh ado.net_bai_03

Xây Dựng Phần Mềm Hướng Đối Tượng Văn Đức Phương Hồng

5. Giao diện người dùng

Thiết kế form frmHocSinh.cs:

Bài tập: - Hoàn chỉnh tầng giao diện của ứng dụng. (gợi ý: trong tầng giao diện chỉ sử dụng HocSinhCtl, HocSinhInfo và DataProvider )- Viết cấu trúc LopInfo để binding danh sách lớp vào combobox.- Viết các lớp để xử lý thêm , xóa, sửa Lop.

7