Phần 2 Xây dựng chương trình trên Form
1. Xây dựng lớp kết nối dữ liệu
Để giúp cho việc kết nối và truy xuất dữ liệu được tiện lợi ta xây dựng lớp DB chứa các hàm cơ sở thực hiện việc kết nối CSDL, các hàm này gọi nối tiếp nhau và lớp TaoMenu kế thừa từ lớp DB chứa đựng các hàm lấy dữ liệu nạp lên Menu.
1.1 Hàm mở kết nồi
public static void OpenConnection()
{
try
{
string scon1 = @"server=Dungetic;Initial Catalog=phanquyen;User ID=sa;Password=123456";
if (DB.connection == null)
{
DB.connection = new SqlConnection(scon1);
}
if (DB.connection.State != ConnectionState.Open)
{
DB.connection.Open();
// MessageBox.Show("Ket noi khong thanh cong");
}
}
catch{
MessageBox.Show("Ket noi khong thanh cong");
Application.Exit();
}
}
Hàm này dùng để dùng để mở kết đến cơ sở dữ liệu.
1.2 Hàm đóng kết nối
protected static void CloseConnection()
{
if (DB.connection != null)
{
if (DB.connection.State == ConnectionState.Open)
{
DB.connection.Close();
}
}
}
Hàm này dùng để đóng kết nối.
1.3 Hàm xây dựng sqlCommand
public static SqlCommand BuildCommand(string procedureName, IDataParameter[] parameters)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = procedureName;
cmd.Connection = DB.connection;
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
return cmd;
}
Hàm này dùng để định nghĩa một sqlCommand được truyền bởi hai tham số đó là: tên thủ tục được viết ở Sql và mảng các tham số cần truyền cho thủ tục. Trả về cho hàm gọi nó một sqlCommand đã được truyền tham số và chỉ định tên thủ tục
1.4 Hàm ExecuteQuery
public static DataTable ExecuteQuery(string procedureName, IDataParameter[] parameters)
{
try
{
DataSet dataSet = new DataSet();
OpenConnection(); //gọi hàm mở kết nối
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildCommand(procedureName, parameters);//gọi hàm BuildCommand
sqlDA.Fill(dataSet);
CloseConnection();
return dataSet.Tables[0];
}
catch (Exception exp)
{
throw exp;
}
}
Hàm này dùng để thực thi lệnh Sqlcommand. Trả về một bảng dữ liệu.
2. Xây dựng lớp truy vấn dữ liệu sử dụng các hàm ở lớp kết nối dữ liệu
2.1 Hàm lấy menu cấp 1
public DataTable lay_menu_cap1()
{
try
{
SqlParameter[] p = { };
DataTable ds = ExecuteQuery("SP_lay_Menucap1", p);
return ds;
}
catch
{
return null;
}
}
Hàm này gọi đến thủ tục SP_lay_Menucap1 lấy về một bảng gồm Macap1 và Tencap1.
2.2 Hàm lấy menu cấp 2
public DataTable Lay_Menu_cap2(string macap1, string Username)
{
try
{
SqlParameter[] p =
{
new SqlParameter("@macap1",SqlDbType.NVarChar,100),
new SqlParameter("@mauser",SqlDbType.NVarChar,100)
};
p[0].Value = macap1;
p[1].Value = Username;
DataTable ds = ExecuteQuery("SP_lay_Menucap2_PQ", p);
return ds;
}
catch
{
return null;
}
}
Hàm này gọi đến thủ tục SP_lay_Menucap2_PQ truyền tham số Macap1 và Mauser. Trả về một bảng gồm Macap2, Tencap2 và Trangthai
2.3 Hàm lấy menu cấp 3
public DataTable Lay_menu_cap3(string macap2, string Username)
{
try
{
SqlParameter[] p =
{
new SqlParameter("@macap2",SqlDbType.NVarChar,100),
new SqlParameter("@Mauser",SqlDbType.NVarChar,100)
};
p[0].Value = macap2;
p[1].Value = Username;
DataTable ds = ExecuteQuery("SP_lay_Menucap3_PQ", p);
return ds;
}
catch
{
return null;
}
}
Hàm này gọi đến thủ tục SP_lay_Menucap3_PQ truyền tham số Macap2 và Mauser. Trả về một bảng gồm Macap3, Tencap3 và Trangthai.
Ghi chú: Các bạn có thể đặt các hàm ở mục 1 và mục 2 vào cùng một lớp
3. Tạo menu trên fom
3.1 Khai báo các bảng để chứa dữ liệu trả về từ csdl.
DataTable Menucap1 = new DataTable();
DataTable Menucap2 = new DataTable();
DataTable Menucap3 = new DataTable();
3.2 Các bước thực hiện
Bước 1:
Menucap1 = menu.lay_menu_cap1()
Duyệt qua từng hàng của bảng Menucap1
+ Chèn Tencap1 vào menucap1
+ gọi hàm Lay_nenu_cap2 truyền thàm số và lấy dữ liệu trả về lưu vào bảng Menucap2
Menucap2 = menu.Lay_Menu_cap2(Menucap1.Rows[i]["macap1"].ToString(),DangNhap.user)
Bước 2:
Duyệt qua từng hàng của bảng Menucap2
+ Chèn Tencap2 vào menucap2
+ Gọi hàm Lay_nenu_cap3 truyền thàm số và lấy dữ liệu trả về lưu vào bảng Menucap3
Menucap3 = menu.Lay_Menu_cap3(Menucap2.Rows[i]["macap2"].ToString(),DangNhap.user)
+ Cài đặt sự kiện cho Menucap2 (nếu có)
Bước 3:
Duyệt qua từng hàng của bảng Menucap3
+ Chèn Tencap3 vào menucap3
+ Cài đặt sự kiện cho Menucap3
Chi tiết xem trong demo đính kèm
Chú ý: User đăng nhấp là Us01 và Pass là 123456.
» Danh sách Tập tin đính kèm:
» Tin mới nhất:
» Các tin khác: