Bài 7:
Đối tượng Data Source
-Đóng gói ứng dụng
- Giới thiệu các kĩ thuật lập trình ASP.NET nâng cao
Các nội dung đã học trong bài trước
Giới thiệu các điều khiển hiển thị dữ liệu
Điều khiển GridView
Điều khiển DetailsView
Hệ thống bài cũ
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
2
Mục tiêu môn học
1. Kiến trúc ba tầng
2. Object Data Source
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
3
2. Object Data Source
3. Triển khai ứng dụng
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
4
Hầu hết các chuyên gia phát
triển ứng dụng đều sử dụng
kiến trúc ba tầng để phát
triển ứng dụng web.
Kiến trúc ba tầng phân tách
phần trình bày, các quy tắc
nghiệp vụ, thành phần truy
cập CSDL của ứng dụng
Ba tầng:
Tầng trình bày
Tầng trung gian
Tầng trình bầy:
Gồm các trang ASP.NET quản lý giao diện ứng dụng.
Tầng trung gian
Gồm các lớp truy cập dữ liệu quản lý truy cập dữ liệu ứng
dụng.
Có thể chứa các đối tượng nghiệp vụ và các quy tắc
nghiệp vụ
Ví dụ: Đối tượng nghiệp vụ: Các lớp biểu diễn thực thể khách
hàng, sản phẩm, nhân viên…
Quy tắc nghiệp vụ: Chính sách giảm giá…
Tầng CSDL
CSDL của ứng dụng
Kiến trúc ba tầng
trong ứng dụng ASP.NET
Tầng trình bầy:
Gồm các trang ASP.NET quản lý giao diện ứng dụng.
Tầng trung gian
Gồm các lớp truy cập dữ liệu quản lý truy cập dữ liệu ứng
dụng.
Có thể chứa các đối tượng nghiệp vụ và các quy tắc
nghiệp vụ
Ví dụ: Đối tượng nghiệp vụ: Các lớp biểu diễn thực thể khách
hàng, sản phẩm, nhân viên…
Quy tắc nghiệp vụ: Chính sách giảm giá…
Tầng CSDL
CSDL của ứng dụng
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
6
Cung cấp phương thức truy xuất dữ liệu từ CSDL.
Phương thức chèn, cập nhật, xóa dữ liệu sử dụng các kĩ
Với các ứng dụng nhỏ, sử dụng SQL data source mang
lại nhiều lợi ích, không phải viết code C#.
Với các ứng dụng lớn, nên thiết kế theo kiến trúc ba
tầng. Do đó, nên sử dụng ObjectDataSource
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
9
Ứng dụng CategoryMaint hiển thị thông tin danh mục
sản phẩm trong CSDL, cho phép người dùng cập nhật
thông tin danh mục sản phẩm
Ứng dụng gồm:
Một điều khiển GridView hiển thị danh sách phân loại sản
phẩm
Một điều khiển DetailsView thiết kế ở chế độ Insert cho
phép người dùng thêm mới sản phẩm
Giới thiệu ứng dụng CategoryMaint
Ứng dụng CategoryMaint hiển thị thông tin danh mục
sản phẩm trong CSDL, cho phép người dùng cập nhật
thông tin danh mục sản phẩm
Ứng dụng gồm:
Một điều khiển GridView hiển thị danh sách phân loại sản
phẩm
Một điều khiển DetailsView thiết kế ở chế độ Insert cho
phép người dùng thêm mới sản phẩm
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
10
Tổ chức ứng dụng trên theo kiến trúc ba tầng, sử dụng
điều khiển ObjectDataSource để thao tác với CSDL
Tầng trình bày: Web Form Default.aspx
Hai điều khiển objectDatasource
Hai điều khiển buộc dữ liệu (drop-down list và datalist)
Web Form
Cấu trúc thư mục của ứng dụng
Thiết kế
ứng dụng theo kiến trúc ba tầng
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
12
Nội dung demo
Tạo chuỗi kết nối trong File web.config
Thiết kết giao diện
Tạo lớp nghiệp vụ: Category
Tạo lớp truy cập CSDL:
Tạo lớp CategoryDB
Truy xuất dữ liệu từ CSDL
Thêm ObjectDataSource, chỉ định CategoryDB là lớp truy cập
dữ liệu cho ObjectDataSource này
Liên kết ObjectDataSource với các điều khiển
Thêm chức năng cập nhật dữ liệu cho điều khiển
Kiểm soát lỗi thao tác với CSDL
Viết mã xử lý sự kiện cho các sự kiện ItemInserted
Demo
Xây dựng ứng dụng ProductList
theo kiến trúc ba tầng
Nội dung demo
Tạo chuỗi kết nối trong File web.config
Thiết kết giao diện
Tạo lớp nghiệp vụ: Category
Tạo lớp truy cập CSDL:
Tạo lớp CategoryDB
Truy xuất dữ liệu từ CSDL
Thêm ObjectDataSource, chỉ định CategoryDB là lớp truy cập
private string longName;
public string CategoryID
{
get { return categoryID; }
set { categoryID = value; }
}
public string ShortName
{
get { return shortName; }
set { shortName = value; }
}
public string LongName
{
get { return longName; }
set { longName = value; }
}
public Category()
{}
}
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
16
public class Category
{
private string categoryID;
private string shortName;
private string longName;
public string CategoryID
{
get { return categoryID; }
set { categoryID = value; }
Lấy chuỗi kết nối được lưu trong file web.config
private static string GetConnectionString()
{
return
ConfigurationManager.ConnectionStrings
["HalloweenConnectionString"].ConnectionString;
}
Truy xuất tất cả danh mục sản phẩm trong bảng Category
trả về kiểu List
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<Category> GetCategories()
{}
Lớp truy cập CSDL CategoryDB
Các phương thức của CategoryDB
Lấy chuỗi kết nối được lưu trong file web.config
private static string GetConnectionString()
{
return
ConfigurationManager.ConnectionStrings
["HalloweenConnectionString"].ConnectionString;
}
Truy xuất tất cả danh mục sản phẩm trong bảng Category
trả về kiểu List
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<Category> GetCategories()
{}
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
18
Chỉ định đây là phương
thức của lớp truy cập
Truy cập CSDL theo kiến trúc kết nối sử dụng data
reader
Phương thức truy xuất dữ liệu
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<Category> GetCategories()
{
List<Category> categoryList = new List<Category>();
SqlConnection con = new SqlConnection(GetConnectionString());
string sel = "SELECT CategoryID, ShortName, LongName "
+ "FROM Categories ORDER BY ShortName";
SqlCommand cmd = new SqlCommand(sel, con);
con.Open();
SqlDataReader dr =
cmd.ExecuteReader(CommandBehavior.CloseConnection);
Category category;
while (dr.Read())
{
category = new Category();
category.CategoryID = dr["CategoryID"].ToString();
category.ShortName = dr["ShortName"].ToString();
category.LongName = dr["LongName"].ToString();
categoryList.Add(category);
}
dr.Close();
return categoryList;
}
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
20
[DataObjectMethod(DataObjectMethodType.Select)]
public static List<Category> GetCategories()
cmd.Parameters.AddWithValue("CategoryID", category.CategoryID);
cmd.Parameters.AddWithValue("ShortName", category.ShortName);
cmd.Parameters.AddWithValue("LongName", category.LongName);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
return i;
}
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
21
[DataObjectMethod(DataObjectMethodType.Insert)]
public static int InsertCategory(Category category)
{
SqlConnection con = new SqlConnection(GetConnectionString());
string ins = "INSERT INTO Categories "
+ " (CategoryID, ShortName, LongName) "
+ " VALUES(@CategoryID, @ShortName, @LongName)";
SqlCommand cmd = new SqlCommand(ins, con);
cmd.Parameters.AddWithValue("CategoryID", category.CategoryID);
cmd.Parameters.AddWithValue("ShortName", category.ShortName);
cmd.Parameters.AddWithValue("LongName", category.LongName);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
return i;
}
Phương thức cập nhật CSDL
[DataObjectMethod(DataObjectMethodType.Update)]
public static int UpdateCategory( Category category)
{
cmd.Parameters.AddWithValue("original_CategoryID",
category.CategoryID);
con.Open();
int updateCount = cmd.ExecuteNonQuery();
con.Close();
return updateCount;
}
Phương thức xóa CSDL
[DataObjectMethod(DataObjectMethodType.Delete)]
public static int DeleteCategory(Category category)
{
SqlConnection con = new SqlConnection(GetConnectionString());
string del = "DELETE FROM Categories "
+ "WHERE CategoryID = @CategoryID "
+ "AND ShortName = @ShortName "
+ "AND LongName = @LongName ";
SqlCommand cmd = new SqlCommand(del, con);
cmd.Parameters.AddWithValue("CategoryID", category.CategoryID);
cmd.Parameters.AddWithValue("ShortName", category.ShortName);
cmd.Parameters.AddWithValue("LongName", category.LongName);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
return i;
}
Đối tượng Data Source - Đóng gói ứng dụng - Các kĩ thuật lập trình ASP.NET nâng cao
23
[DataObjectMethod(DataObjectMethodType.Delete)]
public static int DeleteCategory(Category category)
{