Nối tiếp phần 1, Giáo trình Lập trình cơ sở dữ liệu với C# - Mô hình nhiều tầng: Phần 2 sẽ tiếp tục cung cấp cho học viên các kiến thức về tầng 2: viết các lớp xử lý nghiệp vụ - BLL, xây dựng lớp tự động với DataSet; tầng 3: xây dựng giao diện - PL, tùy biến điều khiển dữ liệu trong ứng dụng, định dạng CSS; hoàn thiện ứng dụng, phân quyền người dùng;... Mời các bạn cùng tham khảo chi tiết nội dung giáo trình!
Trang 1Lập Tánh
Trang 2® Chương 4: Tâng 2: Viết các lớp xử lý nghiệp vụ - BLL 117 mm Chuong 4: TẦNG 2: VIẾT CÁC LỚP XỬ LÝ NGHIỆP VỤ - BLL
Chương này chúng ta khám phá và viết mã ở tầng 2 để tương tác giữa tầng 1 và tầng 3 trong ứng dụng Nội dung chính của chương này:
> Viết các lớp nghiệp vụ cho đối tượng Categories, Contact > Thao tác trên với DataSet có kiểu
> Kết hợp viết mã xử lý với DataSet > Tạo nhiều Project trong mét Solution 1 Business Logic Layer
Để quản lý sản phẩm, người quản lý cần nhập mới, cập nhật, xóa, xem sản phẩm Do đó, chúng ta cần phải cài đặt các phương thức tương ứng cho bảng sản phẩm
Như vậy, nghiệp vụ quản lý sản phẩm có thể lặp lại với các đối tượng khác như quản lý thể loại, khách hàng Do đó, chúng ta tạo những lớp nghiệp vụ tương ứng với các bảng của CSDL
Trang 3118
#region Public Properties protected int _id;
protected string _cateName protected string _imageURL protected int _catePos;
String.Empty; String.Empty; public int CateID
{
get { return _id; } set { _id = value; } }
public string CateName {
get { return _cateName; } set { _cateName = value; } }
public string ImageURL {
get { return _imageURL; } set { _imageURL = value; } }
public int CatePos {
get { return _catePos; } set { _catePos = value; } i #endregion public Categories () { } /// <summary> /// /// </summary> /// <param name="reader"></param> public Categories (SqlDataReader reader) { if (reader != null && !reader.IsClosed) { _id = reader GetInt32 (0) ; if (!reader.IsDBNull(1)) _cateName = reader GetString(1) ; 1£ (!reader.TIsDBNull(2)) _imageURL = reader GetString(2) ; 1£ (!reader.IsDBNull(3)) _catePos = reader GetInt32 (3); } } /// <summary> /// Truy xuất bảng /// </summary> /// <returns></returns>
public static List<Categories> GetCategories ()
Trang 4® Chương 4: Tang 2: Viết các lớp xử lý nghiệp vụ - BLUL 119 PA trad
DBHelp db = new DBHelp();
List<Categories> list = new List<Categories>(); SqlDataReader read = db ExecuteReader ("sp_SelecteCorp_CategoriesAll", CommandType StoredProcedure) ; ‹ while (read.Read() ) { } return list; list.Add(new Categories (read) ) ; } /// <summary> /// Phương thức chèn dữ liệu /// </summary> /// <param name="0"></param> public static void InsertCategories (Categories 0) {
DBHelp db = new DBHelp();
db.AddParameter ("@CateName", o.CateName) ; db.AddParameter("@ImageURL", o.ImageURL) ; db.AddParameter ("@CatePos", o.CatePos) ; db ExecuteNonQuery ("sp_InserteCorp_Category", CommandType StoredProcedure) ; } /// <summary> /// Phương thúc cập nhật dữ liệu /// </summuary> /// <param name="0"></param> public static void UpdateCategories (Categories o) {
DBHelp db = new DBHelp();
Trang 5120 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
1.2 Lớp Products
public class Products {
public static readonly string _connection;
protected int _id;
protected int _cateID;
protected string _proTitle = String.Empty; protected string _imageUrl = String.Empty; protected string _description = String.Empty; #region Public Properties
public int ProductID
{
get { return _id; }
set { _id = value; } }
public int CateID
{
get { return _cateID; }
set { _cateID = value; } }
public string ProTitle
{
get { return _proTitle; } set { _proTitle = value; }
}
public string ImageUrl
{
* get { return _imageUrl; } set { _imageUrl = value; }
}
public string Description
{
get { return _đescription; } set { _description = value; } } #endregion public Products () { Ji: // TODO: Add constructor logic here if } -
//Phương thức truy xuất bảng dữ liệu
public static List<Products> GetProducts ()
{
SqlConnection sqlCon = new SqlConnection(_connection) ;
string strSelect = "SELECT * FROM eCorp_Product"; SqlCommand sqlCom = new SqlCommand(strSelect,sqlCon) ; sqlCom.CommandType = CommandType.Text;
Trang 6Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 121 Al
using (sqlCon) £
sqliCon.Open() ;
SqlDataReader r@ader = sqlCom.ExecuteReader () ;
while (reader Read()) { list.Add(new Products (reader) ) ; } sqlCon.Close(); return list; }
L1 Phương thức truy xuất toàn bộ dữ liệu bảng sản phẩm
public static List<Prođucts> GetProductsAll() {
DBHelp db = new DBHelp();
List<Products> list = new List<Products>() ; SqlDataReader reader = db ExecuteReader ("sp_SelecteCorp_ProductsAll", CommandType StoredProcedure) ; while (reader Read() ) { Products p = new Products(); p.ProductID = reader GetInt32 (reader GetOrdinal ("ProductID") ) ; p.CateID = reader GetInt32 (reader.GetOrdinal ("CateID") ); p.ProTitle =
reader GetString (reader GetOrdinal ("ProTitle") ); if (reader IsDBNull (reader GetOrdinal ("ImageURL") ) )
p.ImageUrl = "Chua cé hinh"; else p.ImageUrl = reader GetString (reader GetOrdinal ("ImageURL") ) ; p.Description = reader Get String (reader GetOrdinal ("Description") ); list.Add(p); } reader Close(); return list; }
//Truy xudt sin phdm theo mã thể loại
Trang 7122 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
}
reader Close(); return list; }
//Truy xuét theo ma san phẩm
public static List<Products> GetProductsByProductID(int proid) { DBHelp db = new DBHelp(); db.AddParameter("@ProductID", proid) ; SqlDataReader reader = db ExecuteReader ("sp_SelecteCorp_Product", CommandType StoredProcedure) ; List<Products> list = new List<Products>(); while (reader.Read() ) { list.Add(new Products (reader) ) ; } reader Close() ; return list; }
!JTruy xuất có giới hạn một số sản phẩm
public static List<Products> GetProductsTOP() { DBHelp db = new DBHelp(); SqlDataReader reader = db ExecuteReader ("sp_SelecteCorp_ProductsTop", CommandType StoredProcedure) ; List<Products> list = new List<Products>(); while (reader.Read() ) { ; list.Add(new Products (reader) ) ; 5 reader Close(); return list; //Chén moi mét san phdm public static void InsertProducts (Products o) { DBHelp db = new DBHelp(); db.AddParameter("@CateID", öo.CateTD) ; db.AddParameter("@ProTitle", o.ProTitle); if (String.IsNulloOrEmpty(o.ImageUr1) )
Trang 8Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
db.AddParameter("@CateID", o.CateID) ; db.AddParameter("@ProTitle", o.ProTitle) ;
if (String.IsNullOrEmpty(o.ImageUr1) )
db.AddParameter ("@ImageURL", DBNull.Value) ; else db.AddParameter("@ImageURL", o.ImageUr1l) ; db AddParameter("@Description", o.Description) ; db.AddParameter ("@ProductID", o.ProductID) ; db ExecuteNonQuery ("sp_UpdateeCorp_Product", CommandType StoredProcedure) ; } //X6a san phẩm theo thể loại } public static void DeleteProducts (Products o) { DBHelp db = new DBHelp() ; db.AddParameter("@ProductID", o.ProductID) ; db ExecuteNonQuery ("sp_DeleteeCorp_Product", CommandType StoredProcedure) ; } public Products (SqlDataReader reader) { if (reader != null && !reader.IsClosed) { _id = reader.GetInt32 (0); if ('reader.IsDBNull(1)) _cateID = reader GetInt32 (1); if (!reader.IsDBNull(2)) _proTitle = reader GetString (2); if (!treader.IsDBNull(3)) _imageUrl = reader GetString (3); if (!reader.IsDBNul1(4)) _description = reader GetString (4); } } static Products () { _connection = WebConfigurationManager.ConnectionStrings["ITEC_eCorpCo nStr"].ConnectionString; 1.3 Lớp Contact public class Contact {
public static readonly string _connectionString; protected int _id;
protected DateTime _createdDate;
Trang 9124 Chương 4: Tâng 2: Viết các lớp xử lý nghiệp vụ - BLL
protected string _address = String.Empty; protected string _iPClient = String.Empty; #region Public Properties
public int ContactID {
} get { return _id; }
public DateTime CreatedDate {
get { return _createdDate; } set { _createdDate = value; }
}
public string FullName {
get { return _fullName; } set { _fullName = value; } }
public string Email {
get { return _email; } set { _email = value; } }
public string Subject r {
get { return _subject; } set { _subject = value; } }
public string Contents {
get { return _contents; } set { _contents = value; } }
public string Phone 1
get { return _phone; } set { _phone = value; }
} :
public string Address x
get { return _address; } set { _address = value; } }
public string IPClient {
get { return _iPClient; } set { _iPClient = value; } }
Trang 10` 2 ® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 125 A fra public Contact () { public } // // TODO: Add constructor logic here //
static List<Contact> GetContact ()
SqlConnection sqlCon = new
Sq1Connection (_connectionString) ;
string strSelect = "SELECT * FROM eCorp Contact"; SqlCommand sqlCom = new SqlCommand(strSelect,sqlCon) ; sqlCom.CommandType = CommandType Text;
List<Contact> list = new List<Contact>();
using (sqlCon) {
sqlCon.Open() ;
SqlDataReader reader = sqlCom.ExecuteReader () ;
Trang 11126 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL } return list; public static void UpdateContact (Contact o) { } DBHelp db = new DBHelp(); db.AddParameter("@ContactID", o.ContactID); db.AddParameter ("@CreatedDate", o.CreatedDate) ; db.AddParameter ("@FullName", o.FullName).; db.AddParameter ("@FullName", o.FullName) ; if (String.IsNullOrEmpty(o.Email) ) db.AddParameter("@Email", DBNull.Value) ; db.AddParameter("@Subject", o.Subject) ; db.AddParameter ("@Contents",o.Contents) ; db.AddParameter("@Phone", o.Phone) ; db.AddParameter ("@Address", o.Address) ; db.AddParameter("@IPClient", o.IPClient) ; db.ExecuteNonQuery ("sp_UpdateeCorp_Contact", CommandType StoredProcedure) ; public static void InsertContact (Contact o) { } DBHelp db = new DBHelp(); db.AddParameter ("@CreatedDate", DateTime Now.ToShortDateString()); db.AddParameter ("@FullName", o.FullName) ; if (String.IsNullOrEmpty(o.Email) )
đb.AddParameter ("@Email", DBNull.Value) ; else db.AddParameter("@Email", o.Email); db.AddParameter ("@Subject", o.Subject) ; đb.AddParameter ("@Contents", o.Contents) ; db.AddParameter ("@Phone", o.Phone) ; db.AddParameter ("@Address", o.Address) ; db.AddParameter("@IPClient", o.IPClient) ; db.ExecuteNonQuery ("sp _InserteCorp_Contact", CommandType StoredProcedure) ; public void DeleteContact (Contact o) { }
DBHelp db = new DBHelp();
Trang 12Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL if (!reader.IsDBNull(4)) _subject = reader GetString (4) ; if (!reader.IsDBNul1(5)) _contents = reader.GetString (5); if (!reader.IsDBNull1(6)) _phone = reader GetString (6) ; if (!reader.IsDBNull(7)) _address = reader GetString(7) ; if (!reader.IsDBNul1(8)) _iPClient = reader GetString(8); } static Contact () { _connectionString = WebConfigurationManager ConnectionStrings["ITEC_eCorpCo nStr"].ConnectionString; } 1.4 Lớp Customer public class Customer {
public static readonly string _connection; protected int _id;
protected string _name = String.Empty; protected string _imageURL = String.Empty; protected string _description = String.Empty; protected string _website = String.Empty; protected string _email = String.Empty; #region properties public int CustomerID Ệ get {return _id;} bản ; public string Name {
get {return _name;} set {_name = value;}
}
public string ImageURL €
get {return _imageURL;} set {_imageURL = value; }
}
public string Description {
Trang 13128 Chương 4: Tầng 2: Viết các lớp xử ly nghiép vu - BLL
public string Website {
get {return _website;} set {_website = value;} }
public string Email {
get {return _email;} set {_email = value;} 3 #endregion public Customer () { public public th // TODO: Add constructor logic here a
static List<Customer> GetCustomer () SqlConnection sqlCon = new
SqlConnection(_connection) ;
string strSelect = "SELECT * FROM eCorp_Customer";
SqlCommand sqlCom = new SqlCommand(strSelect,sqliCon) ;
sqlCom.CommandType = CommandType Text; List<Customer> list = new List<Customer>(); using (sqlCon) { sqlCon.Open () ; SqlDataReader reader = sqlCom.ExecuteReader () ; while (reader.Read() ) { list.Add(new Customer (reader) ) ; } sqlCon.Close() ; return list;
Trang 14® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 129 |ÊÂ } a1) xeader Close () ; return list; public static void InsertCustomer (Customer c) { public public public DBHelp db = new DBHelp(); db.AddParameter("@Name", c.Name) ; if (String.IsNullOrEmpty (c.ImageURL) ) db.AddParameter("@ImageURL", DBNull.Value) ; else db.AddParameter("@ImageURL", c.TmageURL) ; if (String.IsNullOrEmpty(c.Description) ) db.AddParameter("@Description", DBNull.value) ; else db.AddParameter("@Description", c.Description) ; 1£ (String.TsNullorEmpty (c.Website) )
đb.AdđParameter ("@Website", DBNull.Value) ; else db.AddParameter("@Website", c.Website) ; if (String.IsNullOrEmpty(c.Email) ) db.AddParameter("@Email", DBNull.Value) ; else db.AddParameter("@Email", c.Email); db.ExecuteNonQuery ("sp_InserteCorp_Customer", CommandType StoredProcedure) ;
static void UpdateCustomer (Customer c) DBHelp db = new DBHelp();
db.AddParameter("@Name", c.Name) ;
if (String.IsNulloOrEmpty(c.ImageURL) )
db.AddParameter ("@ImageURL", DBNull.Value) ; else db.AddParameter("@ImageURL", c.ImageURL) ; if (String.IsNullorEmpty(c.Description) ) -db.AddParameter("@Description", DBNull.Value) ; else db.AddParameter("@Description", c.Description) ; if (String.TsNullOrEmpty (c.Website) ) db.AddParameter("@Website", DBNull.Value) ; else db.AddParameter("@Website", c.Website) ; if (String IsNullOrEmpty(c.Email) ) db.AddParameter("@Email", DBNull.vValue) ; else db.AddParameter("@Email", c.Email); db.AddParameter("@CustomerID", c.CustomerID) ; db.ExecuteNonQuery ("sp_UpdateeCorp-Customer", CommandType StoredProcedure) ;
static void DeleteCustomer (Customer c) DBHelp db = new DBHelp();
db.AddParameter ("@CustomerID", c.CustomerID) ; db.ExecuteNonQuery ("sp_DeleteeCorp_Customer",
CommandType StoredProcedure) ; Customer (SqlDataReader reader)
Trang 15130 Chương 4: Tang 2: Viét cdc lép xt ly nghiép vu - BLL _id = reader.GetInt32 (0); iff (!reader.IsDBNul1(1)) _name = reader GetString(1); i£ (!reader.IsDBNull(2)) _imageURL = reader GetString (2) ; if (!reader.IsDBNull1(3)) _description = reader GetString(3) ; if (!reader.IsDBNull1(4)) _website = reader GetString (4); if (!reader.IsDBNull(5)) _email = reader GetString(5); } static Customer () € _connection = WebConfigurationManager ConnectionStrings ["ITEC_eCorpCo nStr"] ConnectionString; 3 1.5 Lớp FAQ public class FAQ {
public static readonly string _connection;
protected int _id;
protected string _title = String.Empty; protected string _descript = String Empty; #region Public Properties
public int FAQID {
get { return _id;.} }
public string Title ch
get { return _title; } set { _title = value; } }
public string Descript {
Trang 16Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
public static List<FAQ> GetFAQ()
131 |MỊ?
sqlCon) ; {
SqlConnection sqlCon = new SqlConnection(_connection) ;
string strSelect = "SELECT * FROM eCorp_FAQ"; Sqlcommand sqlCom = new SqlCommand(strSelect, sqlCom.CommandType = CommandType.Text; List<FAQ> list = new List<FAQ>(); using (sqlCon) { sg1Con Open () ;
SqlDataReader reader = sqlCom.ExecuteReader () ;
while (reader Read() ) { list.Add(new FAQ(reader) ) ; } sqlCon.Close() ; return list; } } public static void InsertFAQ(FAQ o) { DBHelp db = new DBHelp(); db.AddParameter("@Title", o.Title); db.AddParameter("@Descript", o.Descript) ; db ExecuteNonQuery ("sp_InserteCorp_FAQ", CommandType StoredProcedure) ; public static void UpdateFAQ(FAQ o)
DBHelp db = new DBHelp(); db.AddParameter("@Title", o.Title); db.AddParameter ("@Descript", o.Descript) ; db.AddParameter("@FAQID", o.FAQID); ‘db ExecuteNonQuery ("sp_UpdateeCorp_FAQ", CommandType StoredProcedure) ;
public static void DeleteFAQ(FAQ o) DBHelp db = new DBHelp(); db.AddParameter("@CateID", o.FAOTD) ; db.ExecuteNonQuery ("sp_DeleteeCorp_FAQ", CommandType StoredProcedure) ; } public FAQ(SqlDataReader reader) { _id = (int)reader["FAQID"] ;
Trang 17132 Chuong 4: Tang 2: Viết các lớp xử lý nghiệp vụ - BLL static FAQ() { _connection = WebConfigurationManager.ConnectionStrings ["ITEC_eCorpCo nStr"].ConnectionString; } 1.6 Lép AboutUs public class AboutUs {
protected int _id;
protected string _description = String.Empty; #region Public Properties
public int IntroID {
get { return _id; } set { _id = value; } }
public string Description {
get { return _description; } set { _description = value; } } #endregion public AboutUs () { ý // TODO: Add constructor logic here // } /// <summary> 177 /// </summary> /// <param name="reader"></param> public AboutUs (SqlDataReader reader) { if (reader != null && !reader.IsClosed) { _id = reader.GetInt32 (0); if (!reader.IsDBNull(1)) _đescription = reader GetString(1); } } /// <summary> /// /// </summary> /// <returns></returns> public static List<AboutUs> GetAboutUsAll() {
DBHelp db = new DBHelp();
Trang 18a : ® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 133 PA card db ExecuteReader ("sp_SelecteCorp_AboutUsAl1l", CommandType StoredProcedure) ; while (read.Read() ) { list.Add(new AboutUs (read) ) ; } return list; } /// <summary> ÿ// /// </summary> /// <param name="b"></param> public static void InsertAboutUs (AboutUs b) {
DBHelp db = new DBHelp() ;
db.AddParameter ("@Description", b.Description) ; db.ExecuteNonQuery ("sp_InserteCorp_AboutU", CommandType StoredProcedure) ; } /// <summary> /// /// </summary> /// <param name="b"></param> public static void UpdateAboutUs (AboutUs b) q DBHelp db = new DBHelp(); db.AddParameter("@Description", b.Description) ; db.AddParameter("@IntroID", b.IntroID) ; db ExecuteNonQuery ("sp_UpdateeCorp_AboutU", CommandType StoredProcedure) ; } /// <summary> J1/ /// </summary> /// <param name="b"></param> public static void DeleteAboutUs (AboutUs b) { DBHelp db = new DBHelp(); db.AddParameter("@IntroID", b.IntroID) ; db.ExecuteNonQuery ("sp_DeleteeCorp_AboutU", CommandType.StoredProcedure) ; } 1.7 Lớp Link © public class Link {
public static readonly string _connection; protected int _id;
protected string _name = String.Empty; protected string _uRL = String.Empty; protected int _pos;
Trang 19134 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
#region Public Properties public int LinkID
{
} get { return _id; }
public string Name {
get { return _name; } set { _name = value; }
}
public string URL {
get { return _uRL; } set { _uRL = value; }
}
bublic int Pos {
get { return _pos; } set { _pos = value; } }
public string Logo {
get { return _logo; } set { _logo = value; } } #endregion public Link() Ệ // // TODO: Add constructor logic here Lf i } public static List<Link> GetLink() { SqlConnection sqlCon = new SqlConnection(_connection) ; string strSelect = "SELECT * FROM eCorp_Link order } by Pos "; SqlCommand sqlCom = new SqlCommand(strSelect, sqlCon) ;
Trang 20® Chương 4: Tâng 2: Viết các lớp xử lý nghiệp vụ - BLL 135 (A } sqlCon.Close(); return list; } public static void InsertLink(Link o) { DBHelp db = new DBHelp(); db AddParameter("@Name", o.Name) ; db AddParameter ("@URL", o.URL) ; db.AddParameter("@Pos", o.POS) ; db.AddParameter("@Logo", o.Logo) ; db ExecuteNonQuery ("sp_InserteCorp_Link", CommandType StoredProcedure) ; public static void UpdateLink(Link o)
Trang 21136 WebConfigurationManager ConnectionStrings [ "TTEC_ eCorpCo nStr"] ConnectionString; } 1.8 Lớp News puklic class News {
public static readonly string _connection;
protected int _id;
protected string _title = String.Empty; protected string _imageURL = String.Empty; protected string _description = String.Empty; protected DateTime _createdDate;
protected string _copyright = String.Empty; protected int _viewNumber;
/// <summary> ///
/// </summary>
#region Public Properties public int NewsID
{
get { return _id; } set { _id = value; } }
public string Title {
get { return _title; } set { _title = value; } }
public string ImageURL {
get { return _imageURL; } set { _imageURL = value; } }
public string Description {
get { return _description; } set { _description = value; } }
public DateTime CreatedDate {
get { return _createdDate; } set { _createdDate = value; } }
public string Copyright {
get { return _copyright; } set { _copyright = value; }
Trang 22Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 137 A Pras ®
public int ViewNumber
{
get { return _viewNumber; } set { _viewNumber = value; } aes #endregion public News () { // // TODO: Add constructor logic here // } /// <summary> Lts /// </summary> /// <returns></returns> public static List<News> GetNews () { SqlConnection sqlCon = new SqlConnection (_connection) ; string strSelect = "SELECT * FROM eCorp_News Order By NewsID DESC"; SqlCommand sqlCom = new SqlCommand(strSelect, sqlCon) ;
sqlCom.CommandType = CommandType Text;
List<News> list = new List<News>() ;
using (sqlCon) { ‘ sqlCon.Open () ;
SqlDataReader reader = sqlCom.ExecuteReader () ;
Trang 24` 2 z ® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL ` 139 [AA /// </summary> /// <param name="reader"></param> public News(SqlDataReader reader) { if (reader != null && !reader.IsClosed) { _id = reader.GetInt32 (0); if (!reader.IsDBNull(1)) _title = reader GetString (1); if (!reader.IsDBNull(2)) _imageURL = reader GetString (2); if (!reader.IsDBNull(3)) _description = reader GetString (3); if (!reader.IsDBNull(4)) _createdDate = reader GetDateTime (4) ; if (!reader.IsDBNull(5)) _copyright = reader GetString (5); if (!reader.IsDBNull(6)) _viewNumber = reader GetInt32 (6) ; } } /// <summary> Ef /// </summary> static News () { _connection = WebCon£figurationManager ConnectionStrings [ "TTEC_ eCorpCo nStr"] ConnectionString; } } 1.9 Lớp Partner public class Partner {
public static readonly string _connection;
protected int _id;
protected string _name = String.Empty; protected string _imageURL = String.Empty; protected string _description = String.Empty; protected string _website = String.Empty; protected string _email = String.Empty;
#region Public Properties public int PartnerID { get { return _id; } } public string Name {
get { return _name; } set { _name = value; }
Trang 25140 Chuong 4: Tang 2: Viết các lớp xử lý nghiệp vụ - BLL
public string ImageURL {
get { return _imageURL; } set { _imageURL = value; } }
public string Description {
get { return _description; -} set { _description = value; } }
public string Website {
get { return _website; } set { _website = value; } }
public string Email {
get { return _email; } set { _email = value; } } : #endregion public Partner() { Ef // TODO: Add constructor logic here // } public static List<Partner> GetPartnerAll() £ SqlConnection sqlCon = new Sq1Connection (_connection) ;
string strSelect = "SELECT * FROM eCorp_Partner"; SqlCommand sqlCom = new SqlCommand(strSelect, sqlCon) ;
sqlCom.CommandType CommandType Text;
Trang 26Chương 4: Tầng 2: Viết các lớp xử ly nghiép vu - BLL 14I J4 { _id = reader.GetInt32 (0); if (!reader.IsDBNull(1)) _name = reader GetString (1); if (!reader.IsDBNull(2)) _imageURL = reader GetString (2); if (!reader.IsDBNull(3)) _description = reader GetString (3); if (!reader.IsDBNull(4)) _website = reader GetString (4); if (!reader.IsDBNull(5)) _email = reader GetString (5); } } public static void InsertPartner (Partner o) { DBHelp đb = new DBHelp() ; db.AddParameter("@Name", o.Name) ; 1£ (String.IsNullOrEmpty (o.ImageURL) )
Trang 27142 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL db.AddParameter("@PartnerID", o.PartnerTD) ; db.ExecuteNonQuery ("sp_DeleteeCorp_Partner", CommandType StoredProcedure) ; } static Partner () { _connection = WebConfigurationManager.ConnectionStrings ["ITEC_eCorpCo nStr"] ConnectionString; } } 1.10 Lớp Service public class Service {
public static readonly string _connection; protected int _id;
protected string _name = String.Empty; protected string _imageURL = String.Empty; protected string _description = String.Empty; #region Public Properties
public int ServiceID {
get { return _id; } set { _id = value; } }
public string Name {
get { return _name; } set { _name = value; } }
public string ImageURL {
get { return _imageURL; } set { _imageURL = value; } }
public string Description {
Trang 28x 3 ® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 143 MA} co
public Service(SqlDataReader reader) x if (reader != null && !reader.IsClosed) { _id = reader.GetInt32 (0); if (!reader.IsDBNull(1)) _name = reader GetString(1); if (!reader.IsDBNull(2)) _imageURL = reader GetString (2); if (!reader.IsDBNull(3)) description = reader GetString (3); } public static List<Service> GetServiceAl1 () { Sqlconnection sqlCon = new Sq1Connection (_connection) ;
string strSelect = "SELECT * FROM eCorp_Service";
SqlCommand sqlCom = new SqlCommand(strSelect,sql1Con) ;
sqlCom.CommandType CommandType Text; List<Service> list new List<Service>(); using (sqlCon) { sqlCon.Open() ; SqlDataReader reader = sqlCom.ExecuteReader (); while (reader.Read()) { list.Add(new Service (reader) ); } sqlcon.Close(); return list; } public static List<Service> GetServiceByServiceID(int sid) { DBHelp db = new DBHelp(); db.AddParameter("@ServiceID", sid); List<Service> list = new List<Service>(); SqlDataReader reader = db ExecuteReader ("sp_SelecteCorp_Service", CommandType StoredProcedure) ; while (reader.Read()) { } return list; list.Add(new Service (reader) ) ; } public static void InsertService(Service o) { DBHelp db = new DBHelp(); db.AddParameter("@Name", o.Name) ; if (String IsNullOrEmpty (o.ImageURL) )
Trang 29144 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL db.AddParameter("@Description", o.Description) ; db.ExecuteNonQuery("sp_InserteCorp_Service", CommandType StoredProcedure) ; } public static void UpdateService(Service o) { DBHelp db = new DBHelp(); db.AddParameter("@Name", o.Name) ; if (String.IsNullorEmpty(o.ImageURL) )
db.AddParameter ("@ImageURL", DBNull.Value) ; else db.AddParameter("@ImageURL", o.ImageURL) ; db AddParameter("@Description", o.Description) ; db.AddParameter("@ServiceID", o.ServiceID) ; db.ExecuteNonQuery ("sp_UpdateeCorp_Service", CommandType.StoredProcedure) ; } public static void DeleteService(Service o) { DBHelp db = new DBHelp(); db.AddParameter("@ServiceID", o.ServiceID) ; db ExecuteNonQuery ("sp_DeleteeCorp_Service", CommandType StoredProcedure) ; } static Service() { —connection -= WebConfigurationManager ConnectionStrings["ITEC_eCorpCo nStr"].ConnectionString; ‡ Chú §:
Sau khi viết các lớp nghiệp vụ ở trên, bạn có thể tự viết theo phong cách của bạn hoặc có thể tùy biến, rút gọn nếu cần thiết
Bạn có thể đóng gói các lớp xử lý nghiệp vụ ra file dIl Cách thực hiện bạn tham khảo ở chương 3 mục Xuất Project ra file dll
2 Xây dựng lớp tự động với DataSet
2.1 Kết nối nguồn dữ liệu và tạo DataSet
Để lấy dữ liệu từ nguồn đữ liệu, bạn cần tạo kết nối đến chúng Thông tin kết nối được ghi ở ñle Web.eonfig
2.1.1 Kết nối ở Seruer Explorer
Trang 30š i ® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 145 A)
Để tạo kết nối đến nguồn dữ liệu, bạn chọn Data Connection,
click chuột phải chon PT ~~ aS Bic ieee 66 aE > Ge itecLSOFT, [E] Refresh >» GL RecLSOFT b & ite NGUYE > Sy Servers Hinh 4.1
Sau đó, bạn cung cấp những thông tin cần thiết để kết nối đến
Server chạy hệ CSDL của ứng dụng, để kiểm tra kết nối, bạn click nút Test connection như hình 4.2
‘Add Connection E2Mciodeeo:
Enter information to connect to the selected data source or click “Change” to choose a different data source and/or provider Data source: ‘Microsoft SQU Server Sallie) _lạ€hangessc] ime
{ Log on to the server - ae
Trang 31146 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
Sau khi kết nối thành công đến CSDL ITEC_eCorp màn hình hiển thị như hình 4.3 H&S 4 (@ Data pao “ + et son] Đã = ioprams nan 5 Gay Tables b B aspnet Applications b E] aspnet Membership > 3: | aspnet_Paths > 3} aspnet_PersonalizationailUsers > [Qj aspnet_PersonalizationPerUser > [EB aspnet_Profite > EB aspnet_Roles > [EB] aspnet_SchemavVersions b BH aspnet Users b 8 aspnet_UsersinRoles > [EG] aspnet_webEvent_Events > EB eCorp_AboutUs ES eCorp_Account > [EB] eCorp_Categories > [EQ eCorp_Contad b Eñ] eCorp Customer T fi eCorp_ FAQ > EB ecorp_tink > EE} eCorp_News > [SJ ecorp_Partner » » FE) eCorp_Partner_Customer > [FE eCorp_Product EĨ ecorp_Service > (3 Views > Gd Stored Procedures ® [SM Functions > (39 Synonyms Lo ä Types (Oy Assemblies itec LSOFT_BOOKS dbo v $B hin RPM ntsc thao Sa Server Explorer 32 Hinh 4.3
Bạn có thể sử dụng nguén dữ liệu một cách trực quan với các đối tượng kết nối nhu SqlDataSource, ObjectDataSource
2.1.2 Tao DataSet
Trang 32Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL Templatesz ` : a a | Visual Studio instalied templates t fa = bi oe = ey Ệ mm 8 & ñ 2 Class Text File Dataset Report Class : Diagram My Templates Search ‘Online Te A file for creating an XML schema with DataSet classes
PR Place code in separate file BB setect maste: page Hinh 4.4 Chọn chuỗi kết nối đã có hoặc tạo mới TableAdapter Configuration Wizard
Choose Your Data Connection po
Trang 33148 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
TableAdapter Configuration Wizard
Choose a Command Type
The TableAdapter uses SQL statements or stored procedures
How should the TableAdapter access the database? © Use SQL statements
Specify a SQL statement If you provide a single-table SELECT statement, the wizard can generate
INSERT, UPDATE, and DELETE statements for you
* Create new stored procedures
Specify a SQL statement and the wizard will create a new stored procedure If you provide a
single-table SELECT statement, the wizard can generate INSERT, UPDATE, and DELETE stored
procedures for you
Use existing stored procedures
Choose an existing stored procedure for each command (SELECT, INSERT, UPDATE, and DELETE} few Breviouse [oeNetonee) - [ae€aneetrcs = Hinh 4.6 Chọn các bảng để xây dựng DataSet (hình 4.7)
Add Tabie beyEke|irerÐifze)
Trang 34W ° ® Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 149 ĐÁ Query Builder xi ca “ TH Ø TT {All Columns} i |v] ProductiD i [vi catero ị i |v) Protitie 4 i [vJImageurt zi a 4 > ©—_ CoUm Alias Tabe Outp SotType SoriOrder Za ia eCorp_Pro N ia „ CatelD eCorp_Pro mì ‡ ProTitle eCorp_Pro Mi sey = = = * 4 [z4 pavarsia avis) > SELECT ProductID, CatelD, ProTitle, ImageUrl, Description FROM eCorp_Product Ị K91 HH 02223 1x ytcyhr2vdnh.ingrcodec-g1nghngiưngognnngnndhệBgDBĐS .cec222%-‹20ã09đ02 0202 472221729260152.-t0s2z li 4 Hình 4.8
Click OK và cliek nút Next > ở các bước sau để hoàn tất Kết quả sau khi thêm bảng eCorp_Product vào DataSet như hình 4.9 App_Code/dseCorp.xsd*- Default,aspx ProducHD CatelD i | Provitie i ImageUri i i Description i Sd Fill,GetData g i Hinh 4.9
Tương tự, bạn thêm các bảng khác vào DataSet
9.2 Xây dựng câu lệnh truy vấn
Trang 35(UEF) 150 Chuong 4: Tang 2: Viét cdc lép xt ly nghiép vu - BLL Giả sử, để truy xuất sản phẩm theo mã thể loại, câu lệnh được xây dựng trên DataSet lần lượt qua các hình sau: Ÿ ProdudiD CatelD ProTitie ImageUrl Description Click Next> dé chon loai Configure Rename Autosize Preview Data View Code Properties Hinh 4.10 câu lệnh truy vấn (hình 4.11)
Tabi ipter query uses How the TabieAdapt)
© Use SQL statements Specify a SELECT statemeni > Create new stored proced © Use existing stored proce Choose an existing stored
TableAdapter Query Configuration Wizard
Choose a Command Typ TableAdaptet Query Configuration Wizard
Specify a SELECT statement 2
Choose a Query Type
type of query to be generated
What type of SQL query would you like to use? ‘© SELECT which returns rows
Returns one or mary rows or columns
(© SELECT which returns a single value
Trang 36Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 151
Giao diện viết mã SQL hoặc chọn nút Query Builder để xây dựng câu lệnh truy vấn (hình 4.12)
TableAdapter Query Configuration Wizard TẾ Ga C80 một
Specify a SQL SELECT statement
‘The SELECT statement will be used by the query
Type your SQL statement or use the Query Builder to construct it What data should be loaded into the
table?
What data should the table load?
[SELECT —ProductiD, CatelD, Profitle, ImageUrl, Description FROM eCorp_Prođuct Hình 4.12 Cửa sổ xây dựng câu lệnh truy vấn theo tham số @CateTD (hình 4.13) larexlaebbsaoý k3 Le Table _ Sort Type Sort Or Filter + eCorp_Pro THỊ ' ~ @CatelD Ũ ị emis eCorp_Pro L ProTitle eCorp_Pro i ImageUd eCorp_Pro : Description Mg —- ÌSELECT ProductD, CatelD, ProTitle, TríageUrl, Description FROM eCorp_Product
Trang 37152 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL
Click OK, đặt tên phương thức đã xây dựng GetProductsByCateTD (hình 4.14):
TableAdapter Query Configuration Wizard
Choose Methods to Generate
The TableAdapter methods load and save data between your application and the database
Which methods do you want to add to the TableAdapter?
()) Filla DataTable Ề
Creates a method that takes a DataTable or DataSet as a parameter and executes the SQL statement or SELECT stored procedure entered on the previous page
Method name:
{Vi Return a DataTable
Creates a method that returns a new DataTable filled with the results of the SQL statement or SELECT
stored procedure entered on the previous page
Method name: | GetProductsByCatelD| lo (bere Breviouson| [otiexte inne] [mesBinistrine [sec €aneel~s] = Hình 4.14
Phương thức này được sinh mã như sau:
public virtual dseCorp.eCorp_ProductDataTable GetProductsByCateID(int CateID) { this.Adapter.SelectCommand = this.CommandCollection[1]; this Adapter.SelectCommand Parameters[0].Value = ((int) (CateID) ); dseCorp.eCorp_ProductDataTable dataTable = new dseCorp.eCorp_ProductDataTable() ; this.Adapter.Fill(dataTable) ; return dataTable; }
2.3 Truy xuất dữ liệu từ DataSet
Chúng ta sử dụng điều khiển ObjectDataSource để truy xuất các phương thức đã viết ở DataSet hoặc các lớp xử lý nghiệp vụ Sau khi viết các phương thức ở DataSet, bạn sử dụng đối tượng ObjectDataSource để
Trang 38H „ ®
Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 153 (AA tod
Sử dụng điều khiển DropDownList, chọn nguồn dữ liệu từ bảng
eCorp_Categories đã ánh xạ vào DataSet nhu hinh 4.15
Configure Data Source - odsCate keqxiscsbsgt)
SES
i _ Choose a Business Object
Select a business object that can be used to retrieve or update data {for example, an object defined in the Bin or App_Code directory for this application)
Choose oe business object: CategoriesTableadapte | Show only data components dsecorprableAdapters ecorp.c đseCorpTableAdapters.eCorp ProductTableAdapter Hình 4.15 Chọn phương thức truy xuất dữ liệu (hình 4.16) Configure Data Source - odsCate F3 Define Data Methods
Choose a method of the business object that returns data The method can retum a DataSet, DataReader, or strongly: Example: GetProducts{fint82 categornyld), returns a DataSet ' Choose a method: | ,SetDatai, returns eco rp_CategoriesDataTabl Boon |
GetDatad, returns eCorp_CategoriesDataTable
enema _—_— 09-2202 2 toy Prey
Hinh 4.16
Trang 39
154 Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL Select a data source: |odsCate , |
Select a data field to display in the DropDownList:
CateName rani sacs v
Select a data field for the value of the DropDowni
[CateD =
Hinh 4.17 3
Sử dụng điều khiển GridView để hiển thị sản phẩm theo thể loại Chọn nguồn dữ liệu cho GridView, chọn phương thức truy xuất sản phẩm theo mã thể loại (hình 4.18) Configure Data Source - odsProducts : beat harbibrer} © z Define Data Methods (SE umnarssgrjsamti
Choose a method of the business object that retums data to associate with the SELECT ‘operation | | The method can return a DataSet, DataReader, or strongly-typed collection
Trang 40
3 ®
Chương 4: Tầng 2: Viết các lớp xử lý nghiệp vụ - BLL 155 (AA Chọn nguồn tham số truyền vào cho phương thức (hình 4.19)
The wizard has detected one or more parameters in your SELECT method For each parameter in the
SELECT method, choose a source for the parameter's value Parameters: Paramet €ontroiD: ĐefauttValue: [7 kh Na vix rộ Y⁄ sI CA) sị nced le: Method signature: | GetProductsByCatelD@nts2 CatelD}, returns eCorp_ProductDataTable “a | * Hình 4.19 Và kết quả mà ta có được như hình 4.20 | 7 + + igen “Cap nhật sản phẩm ấy tính xách tay Chọn thế loại ͆
24 HP-Compagq Pavilion DV9201TX ~fimages/Products/1S-T66 gif 21 Acer Aspire 5613ZNWLi(020} ~/images/Preducts/S-S634WLMi gif 20 VAIO PCG-V505f€ (PCGV505ECP28) ~/Images/Productsíx601706.nho.jpg
+1 VAIO ee: eae ~/images/Products/x601706.nhe jpg
10 {BM ThinkPad X60 1706 B49 ~fimages/Products/x601706.nho.jpg 9 Acer Aspire 5613ZNWLi(020) ~fimages/Products/S-5634WLMi_ gif 8 Dell Inspiron XPS M140 S1] ~/images/Products/x601706.nho jpg 7 HP-Compag Pavilion DV9201TX ~/Images/Products/1S-T60 gi