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

Giáo án - Bài giảng: BÀI TẬP WINDOW FORM

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 (3.52 MB, 61 trang )

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 1
Lập trình ứng dụng WinForm với C#

1. Viết chương trình tính đạo hàm đơn thức: P(x) = ax
n

a. Tạo ứng dụng WinForm:
Khởi động Microsoft Visual Studio 2005
Từ menu File chọn New\Project

b. Thiết kế và lập trình:
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng

c. Đăng ký và xử lý sự kiện cho Button “Thoát”
Cửa sổ Properties, cho
phép thay đổi các thuộc
tính của control
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng



Double click
chuột trái vào
sự kiện cần xử

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
d. Đăng ký và xử lý cho sự kiện Button tính đạo hàm:
private void bTinh_Click(object sender, EventArgs e)
{
if (heso_p.Text.Trim().Equals("") || somu_p.Text.Trim().Equals(""))


{
MessageBox.Show("Chưa nhập dữ liệu đầy đủ.", "Thong bao loi",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
int a, b;
//Chuyển đổi chuỗi thành số
a = Int32.Parse(heso_p.Text.Trim());
b = Int32.Parse(somu_p.Text.Trim());
//Chuyển đổi số thành chuỗi
heso_q.Text = Convert.ToString(a * b);
somu_q.Text = Convert.ToString(b - 1);
}
e. Chú ý xử lý các trường hợp ngoại lệ (dữ liệu nhập không hợp lệ)
i. Trong trường hợp này sẽ phát sinh lỗi và dừng chương trình nếu người dùng nhập
giá trị không hợp lệ (cụ thể dữ liệu nhập không phải là số)
ii. Khi đó phương thức Int32.Parse(…) sẽ phát sinh ngoại lệ

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
iii. Để xử lý ngoại lệ trong C#, chúng ta dùng khối try { }catch( )
private void bTinh_Click(object sender, EventArgs e)
{
if (heso_p.Text.Trim().Equals("") || somu_p.Text.Trim().Equals(""))
{
MessageBox.Show("Chưa nhập dữ liệu đầy đủ.", "Thong bao loi",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
int a=0, b=0;
try

{
//Chuyển đổi chuỗi thành số
a = Int32.Parse(heso_p.Text.Trim());
b = Int32.Parse(somu_p.Text.Trim());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Loi dinh dang so",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
//Chuyển đổi số thành chuỗi
heso_q.Text = Convert.ToString(a * b);
somu_q.Text = Convert.ToString(b - 1);
}
iv. Để 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


 Giải pháp ???



Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng


 Xử lý sự kiện nhấp phím (KeyPress)
private void heso_p_KeyPress(object sender, KeyPressEventArgs e)
{

if ((e.KeyChar < '0' || e.KeyChar >= '9'))
e.Handled = true;
}
// Chú ý xử lý trường hợp khi nhấn các phím xóa, di chuyển
f. Sinh viên tự phát triển tiếp để hoàn thiện chương trình trên
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 2
Lập trình ứng dụng WinForm với C# (tt)

2. Viết chương trình Giải phương trình bậc 2 có dạng: ax
2
+ bx + c = 0, với a ≠ 0
a. Tạo ứng dụng WinForm:
Khởi động Microsoft Visual Studio 2005 tạo ứng dụng C# tương tự như bài tập 1
(hướng dẫn của tuần 1)
b. Thiết kế và lập trình:

c. Đăng ký và xử lý sự kiện cho Button “Thoát”
d. Tạo lớp TAM_THUC
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng

Cài đặt lớp TAM_THUC:
class TAM_THUC
{
private double a; //a<>0
private double b;
private double c;
public double HeSoA
{
get

{
return a;
}
set
{
a=value;
}
}
public double HeSoB
{
get
{
return b;
}
set
{
b=value;
}
}

public double HeSoC
Click chuột phải lên
project “BaiTap2” để
t
ạo class mới

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
{
get
{

return c;
}
set
{
c=value;
}
}
public TAM_THUC()
{
}
public bool NhapHeSo(string hesoa, string hesob, string hesoc)
{
try
{
if (hesoa.Trim().Length == 0)
{
MessageBox.Show("Chưa nhập hệ số a", "Thong bao loi",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
return false;
}
else if (hesob.Trim().Length == 0)
{
MessageBox.Show("Chưa nhập hệ số b", "Thong bao loi",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
return false;
}
else if (hesoc.Trim().Length == 0)
{
MessageBox.Show("Chưa nhập hệ số c", "Thong bao loi",
MessageBoxButtons.OK, MessageBoxIcon.Stop);

return false;
}
a = Double.Parse(hesoa);
b = Double.Parse(hesob);
c = Double.Parse(hesoc);
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Loi", MessageBoxButtons.OK,
MessageBoxIcon.Stop);
return false;
}
}
public NGHIEM GiaiPT()
{
NGHIEM cNghiem = new NGHIEM();
double delta;
delta=b*b-4*a*c;
if(delta<0)
cNghiem.LoaiN = 0;
else if(delta==0)
{
cNghiem.LoaiN = 1;
cNghiem.x1 = -b/2*a;
}

else
{
cNghiem.LoaiN=2;

Để class này hiểu hàm
MessageBox thì ở đầu class phải :
using System.Windows.Forms;
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
cNghiem.x1 = -b - Math.Sqrt(delta)/2*a;
cNghiem.x2 = -b + Math.Sqrt(delta)/2*a;
}
return cNghiem;
}
}
e. Tạo và cài đặt lớp NGHIEM
class NGHIEM
{
private double[] x = new double[2];
private int LoaiNghiem;
public NGHIEM()
{
}
public int LoaiN
{
get
{
return LoaiNghiem ;
}
set
{
LoaiNghiem=value;
}
}
public double x1

{
get
{
return x[0];
}
set
{
x[0]=value;
}
}
public double x2
{
get
{
return x[1];
}
set
{
x[1]=value;
}
}
public void Xuat(TextBox txtNghiem)
{
if(LoaiNghiem==0)
txtNghiem.Text="Phương trình trên vô nghiệm";
else if(LoaiNghiem==1)
{
txtNghiem.Text = "Phương trình trên có nghiệm kép ";
txtNghiem.Text += "x= " + x[0];
}

else
{
txtNghiem.Text=
"Phương trình trên có 2 nghiệm phân biệt:";
txtNghiem.Text +=" x1 = " + x[0];
txtNghiem.Text +=" va x2 = " + x[1];
Phải có:
using System.Windows.Forms;
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
}
}
}
f. Đăng ký và xử lý cho sự kiện Button giải phương trình:
private void bGiai_Click(object sender, EventArgs e)
{
TAM_THUC tt = new TAM_THUC();
NGHIEM N;

tt.NhapHeSo(heso_a.Text.Trim(), heso_b.Text.Trim(),
heso_c.Text.Trim());
N = tt.GiaiPT();
N.Xuat(txtNghiem);
}
g. Xử lý lỗi phát sinh khi người dùng nhập dữ liệu không phải là số

h. Để 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



 Giải pháp ???


 Xử lý sự kiện nhấp phím (KeyPress)
i. Sinh viên tự phát triển tiếp để hoàn thiện chương trình trên
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
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 4
Chủ đề: ADO.NET (tt)

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 (tt).



1. Thiết kế CSDL:
a. Sử dụng lại CSDL của tuần trước (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. Sử dựng lại ứng dụng đã được hướng dẫn trong tuần 3:
Thiết kế lại 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


Kết quả màn hình khi chạy:





DataGridView
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Viết hàm để load danh sách học sinh vào DataGridView
- Ta viết hàm getDSHocSinh có nhiệm vụ trả về bảng thông tin học sinh như sau:
private DataTable getDSHocSinh()
{
adapter = new OleDbDataAdapter("Select h.MaHS, h.TenHS, h.NgaySinh,
h.DiaChi, h.DiemTB, l.TenLop From HOCSINH h, LOP l
Where h.MaLop=l.MaLop", connection);
dataSet = new DataSet();
adapter.Fill(dataSet);
return dataSet.Tables[0];
}
- Trong sự kiện form load, ta gọi hàm getDSHocSinh và gán kết quả cho datasource của
DataGridView
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";

//Load danh sách học sinh lên lưới

dgHocSinh.DataSource = getDSHocSinh();

//Định dạng lưới
DinhDangLuoi();
}
Hàm DinhDangLuoi như sau:
private void DinhDangLuoi()
{
dgHocSinh.ReadOnly = true;
dgHocSinh.Columns[0].HeaderText = "Mã HS";
dgHocSinh.Columns[0].Width = 70;
dgHocSinh.Columns[1].HeaderText = "Tên HS";
dgHocSinh.Columns[1].Width = 150;
dgHocSinh.Columns[2].HeaderText = "Ngày sinh";
dgHocSinh.Columns[2].Width = 90;
dgHocSinh.Columns[3].HeaderText = "Địa chỉ";
dgHocSinh.Columns[3].Width = 200;
dgHocSinh.Columns[4].HeaderText = "Điểm TB";
dgHocSinh.Columns[4].Width = 80;
dgHocSinh.Columns[5].HeaderText = "Lớp";
dgHocSinh.Columns[5].Width = 80;
}

Đã hướng dẫn
trong tuần 3
Định dạng lưới hiển thị
danh sách h
ọc sinh

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng

Khi người dùng chọn một row (chọn 1 học sinh) trên lưới 

 hiển thị thông
tin học sinh vừa chọn lên các control trên form để chỉnh sửa và cập nhật
thông tin.

Vậy giải pháp xử lý ???


 Sinh viên cần phải Tìm hiểu các sự kiện phát sinh trên lưới DataGridView


Trong trường hợp này chúng ta xử lý sự kiện SelectionChanged:


private void dgHocSinh_SelectionChanged(object sender, EventArgs e)
{
DataGridViewSelectedRowCollection rows = dgHocSinh.SelectedRows;

if (rows.Count > 0)
{
DataGridViewRow row = rows[0];
txtMaHS.Text = row.Cells["MaHS"].Value.ToString();
txtTenHS.Text = row.Cells["TenHS"].Value.ToString();
if (row.Cells["NgaySinh"].Value.ToString().Length>0)
dtNgaySinh.Value =
DateTime.Parse(row.Cells["NgaySinh"].Value.ToString());
txtDiaChi.Text = row.Cells["DiaChi"].Value.ToString();
txtDiemTB.Text = row.Cells["DiemTB"].Value.ToString();
cboLop.Text = row.Cells["TenLop"].Value.ToString();

}
}

Sinh viên phải xử lý Khi tiến hành lưu thông tin của một học sinh vào bảng
HOCSINH phải kiểm tra xem có tồn tại học sinh này trong CSDL chưa?
- Nếu chưa có thì insert (thêm mới)
- Nếu tồn tại thì update (cập nhật, sửa)



Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Khó khăn gặp phải của người dùng: phải chép file HOCSINH.mdb vào đúng
vị trí đã sử dụng trong chương trình. Nghĩa là đường dẫn kết nối đến CSDL
cố định
connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");

Nếu trên máy tính không tồn tại đường dẫn này  sẽ phát sinhh lỗi và dừng chương trình.



 Giải pháp khắc phục tình trạng này ???



 Cho phép người dùng chỉ ra đường dẫn vật lý lưu trữ CSDL (chọn đường
dẫn lưu trữ CSDL)



Bước 1: Add thêm một form mới (frmSelectPath) vào Project



Thiết kế giao diện cho Form mới như sau:
Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng


Form “frmSelectPath” phải được chạy đầu tiên ???


Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Trong class Form1.cs khai báo biến sPathFilename như sau:

public static string sPathFilename = "";

Viết code cho sự kiện khi người dùng chọn File :

private void btnOK_Click(object sender, EventArgs e)
{
//Filter file
openFileDialog1.Filter = "File (*.mdb)|*.mdb";

//Không cho phép chọn nhiều file
openFileDialog1.Multiselect = false;

//Set caption cho dialog
openFileDialog1.Title = "Chon CSDL";

//Set tên file mặc định
openFileDialog1.FileName = "HOCSINH.mdb";


//Hiển thị hộp thoại
DialogResult dgResult = openFileDialog1.ShowDialog();
if (dgResult == DialogResult.OK)
txtFile.Text = openFileDialog1.FileName;
}
Viết code cho sự kiện button “Load”:


private void btnLoad_Click(object sender, EventArgs e)
{
Form1.sPathFilename = txtFile.Text;
Form1 frm = new Form1();
this.Hide();
frm.ShowDialog();
}

Xây dựng phần mềm hướng đối tượng GVHD: Trần Anh Dũng
Như vậy, trong Form1 chúng ta sửa lại như sau:

- Trong sự kiện Form1_Load thay dòng lệnh

connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");

Bằng dòng lệnh sau:

connect(sPathFilename);

- Trong sự kiện thoát phải dùng lệnh: Application.Exit(); để thoát ứng dụng ( bởi vì
this.Close() dùng để đóng 1 form)


Sinh viên phát triển tiếp để hoàn thiện chương trình


3. Bài tập:
a. Kiểm tra các ràng buộc về dữ liệu
b. Tìm hiểu các sự kiện của DataGridView
c. Cải tiến màn hình giao diện nhập thông tin học sinh để người dùng thao tác tiện
lợi và thật nhanh chóng
i. Thiết kế lại giao diện cho phép nhập danh sách học sinh trực tiếp trên lưới
(tượng tự như nhập liệu trên file Excel)
ii. Tìm hiểu việc add một số control vào các cột trên DataGridView (Ví dụ: cột
ngày sinh phải add control “chọn ngày tháng năm”, cột Lớp phải add control
“ComboBox” và load dữ liệu vào comboBox cho phép chọn lựa trong khi nhập
liệu.
iii. …
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 5
Chủ đề: ADO.NET (tt)

Phần 2: 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.
(Kết nối với Database SQL Server)

1. Thiết kế CSDL SQL Server như sau:
a. Tạo databse với tên DBHOCSINH, thiết kế các table sau:

HOCSINH
STT Tên trường Kiểu dữ liệu Ghi chú
1 MaHS Nvarchar(20) PrimaryKey
2 TenHS Nvarchar(100)

3 NgaySinh Datetime
4 DiaChi Nvarchar(255)
5 DTB Real
6 MaLop Nvarchar(20) ForeignKey (tham chiếu đến
Lop(MaLop)

LOP
STT Tên trường Kiểu dữ liệu Ghi chú
1 MaLop Nvarchar(20) PrimaryKey
2 TenLop Nvarchar(100)
3 SiSo smallint

2. Tạo project mới:
Thiết kế lại Form “Kết nối CSDL SQL Server” như màn hình sau:

×