1. Trang chủ
  2. » Công Nghệ Thông Tin

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

141 11 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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 1

Lậ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 3

118

#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 5

120 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 6

Chươ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 7

122 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 8

Chươ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 9

124 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 11

126 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 12

Chươ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 13

128 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 15

130 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 16

Chươ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 17

132 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 18

a : ® 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 19

134 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 21

136 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 22

Chươ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 25

140 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 26

Chươ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 27

142 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 28

x 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 29

144 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 31

146 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 32

Chươ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 33

148 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 34

W ° ® 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 36

Chươ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 37

152 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 38

H „ ®

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

Ngày đăng: 17/12/2021, 10:12

HÌNH ẢNH LIÊN QUAN

Test connection như hình 4.2. - 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
est connection như hình 4.2 (Trang 30)
dựng trín DataSet lần lượt qua câc hình sau: - 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
d ựng trín DataSet lần lượt qua câc hình sau: (Trang 35)
Sử dụng điều khiển DropDownList, chọn nguồn dữ liệu từ bảng - 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
d ụng điều khiển DropDownList, chọn nguồn dữ liệu từ bảng (Trang 38)
Chọn nguồn tham số truyền văo cho phương thức (hình 4.19). - 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
h ọn nguồn tham số truyền văo cho phương thức (hình 4.19) (Trang 40)
Kết quả ânh xạ bảng eCorp_Contact văo DataSet dseCorp.xsd như  hình  4.21.  - 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
t quả ânh xạ bảng eCorp_Contact văo DataSet dseCorp.xsd như hình 4.21. (Trang 41)
Hình 4.25 - 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
Hình 4.25 (Trang 45)
Hình 4.28 - 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
Hình 4.28 (Trang 48)
Từ cửa sổ ToolBox, kĩo thả điều khiển ObjectDataSource (hình - 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
c ửa sổ ToolBox, kĩo thả điều khiển ObjectDataSource (hình (Trang 51)
trang MasterPage.master như hình 5.5. - 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
trang MasterPage.master như hình 5.5 (Trang 55)
Hình 5.15 - 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
Hình 5.15 (Trang 61)
Hình 5.24 - 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
Hình 5.24 (Trang 65)
Bạn đê khâm phâ tầng thứ 3 của mô hình 3 tầng — tầng giao diện người  dùng.  Qua  chương  năy,  bạn  đê  học  được  câch  sử  dụng  câc  điều  khiển  - 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
n đê khâm phâ tầng thứ 3 của mô hình 3 tầng — tầng giao diện người dùng. Qua chương năy, bạn đê học được câch sử dụng câc điều khiển (Trang 74)
Vùng nhập hình ảnh: - 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
ng nhập hình ảnh: (Trang 78)
Kết quả cuối cùng chúng ta đê lăm được xem trín trình duyệt (hình - 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
t quả cuối cùng chúng ta đê lăm được xem trín trình duyệt (hình (Trang 80)
Hình 6.9 - 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
Hình 6.9 (Trang 84)
Hình 6.11 - 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
Hình 6.11 (Trang 88)
Khi nhấn nút Sửa, trang web sẽ chuyển sang giao diện sau (hình - 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
hi nhấn nút Sửa, trang web sẽ chuyển sang giao diện sau (hình (Trang 93)
Hình 6.19 - 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
Hình 6.19 (Trang 94)
Hình 6.20 - 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
Hình 6.20 (Trang 95)
hình 6.22: - 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
hình 6.22 (Trang 96)
Để tạo trang thím mới dữ liệu ở bảng eCorp_Lảnk, bạn sử dụng - 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
t ạo trang thím mới dữ liệu ở bảng eCorp_Lảnk, bạn sử dụng (Trang 108)
Để thím mới một mẩu tin ở bảng ecorp_Partner, bạn xđy dựng giao - 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
th ím mới một mẩu tin ở bảng ecorp_Partner, bạn xđy dựng giao (Trang 112)
Hình ảnh - 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
nh ảnh (Trang 114)
Hình 6.43 - 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
Hình 6.43 (Trang 118)
Hình 6.48 - 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
Hình 6.48 (Trang 120)
Khi bạn nhấn nút Sửa, chuyển sang giao diện hình 6.54. - 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
hi bạn nhấn nút Sửa, chuyển sang giao diện hình 6.54 (Trang 123)
Truy xuất toăn bộ bảng giới thiệu, thủ tục được căi đặt: - 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
ruy xuất toăn bộ bảng giới thiệu, thủ tục được căi đặt: (Trang 124)
Hình 6.56 - 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
Hình 6.56 (Trang 126)
Bạn gõ lệnh sau (xem hình 6.63): - 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
n gõ lệnh sau (xem hình 6.63): (Trang 129)
Hình 6.67 - 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
Hình 6.67 (Trang 132)