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
Hệ thống bài cũ 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 2
Mục tiêu môn học 1. Kiến trúc ba tầng 2. Object Data Source 3. Triển khai ứng dụng 3
4
Kiến trúc ba tầng trong ứng dụng ASP.NET 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 CSDL Tầng trình bày Tầng trung gian Tầng CSDL Web Form Lớp nghiệp vụ Lớp truy cập CSDL CSDL 5
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 6
Lớp truy cập CSDL 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ĩ thuật truy cập CSDL như ADO.NET. Nên đặt trong folder App_Code. 7
8
Object Data Source Giống với SQL data source, Object data source cung cấp phương pháp: Truy xuất hiển thị dữ liệu từ CSDL cho người dùng Cập nhật CSDL. Khác Object data source cho phép phát triển ứng dụng CSDL theo kiến trúc ba tầng Object data source truy cập dữ liệu qua lớp truy cập dữ liệu. SQL data source truy cập CSDL trực tiếp. 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 9
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 10
Thiết kế ứng dụng theo kiến trúc ba tầng 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) Tầng trung gian: Lớp truy cập CSDL ProductDB, lớp nghiệp vụ Category Web Form Tầng CSDL: CSDL Halloween lưu Điều khiển buộc dữ liệu Tầng trong hệ quản trị SQL Server trình bày Tầng trung gian Tầng CSDL Object DataSource CategoryDB, Category CSDL Hallowen 11
Thiết kế ứng dụng theo kiến trúc ba tầng Cấu trúc thư mục của ứng dụng 12
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 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... 13
Chuỗi kết nối Tạo chuỗi kết nối trong file web.config <connectionstrings> <add name="halloweenconnectionstring" connectionstring="data Source=localhost\sqlexpress;Initial Catalog=Halloween;Integrated Security=True" providername="system.data.sqlclient"/> </connectionstrings> 14
Thiết kế giao diện Thêm các điều khiển: GridView DetailsView Label 15
Lớp nghiệp vụ Category Khai báo các thuộc tính tương ứng với các cột lấy từ CSDL và các hàm get, set của các thuộc tính này public class Category { private string categoryid; private string shortname; 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
Lớp truy cập CSDL CategoryDB Cung cấp các phương thức truy xuất, thêm, cập nhật, xóa dữ liệu và trả về kiểu đối tượng DataObject cho điều khiển ObjectDataSource Để chỉ định CategoryDB là lớp truy cập CSDL Thêm dòng [DataObject(true)] vào trước dòng khai báo lớp 17
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() {} Chỉ định đây là phương thức của lớp truy cập CSDL 18
Lớp truy cập CSDL CategoryDB Phương thức cập nhật CSDL [DataObjectMethod(DataObjectMethodType.Update)] public static int UpdateCategory(Category original_category, Category category) {} Phương thức xóa CSDL [DataObjectMethod(DataObjectMethodType.Delete)] public static int DeleteCategory(Category category) {} Phương thức chèn dữ liệu [DataObjectMethod(DataObjectMethodType.Insert)] public static int InsertCategory(Category category) {} 19
Phương thức truy xuất dữ liệu Truy cập CSDL theo kiến trúc kết nối sử dụng data reader [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; } 20
Phương thức thêm dữ liệu vào CSDL [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; } 21
Phương thức cập nhật CSDL [DataObjectMethod(DataObjectMethodType.Update)] public static int UpdateCategory( Category category) { SqlConnection con = new SqlConnection(GetConnectionString()); string up = "UPDATE Categories " + "SET ShortName = @ShortName, " + "LongName = @LongName " + "WHERE CategoryID = @original_categoryid " ; SqlCommand cmd = new SqlCommand(up, con); cmd.parameters.addwithvalue("shortname", category.shortname); cmd.parameters.addwithvalue("longname", category.longname); cmd.parameters.addwithvalue("original_categoryid", category.categoryid); con.open(); int updatecount = cmd.executenonquery(); con.close(); return updatecount; } 22
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; } 23
Truy xuất dữ liệu từ CSDL Thêm ObjectDataSource Chọn phương thức truy cập CSDL trong các tab SELECT, INSERT Chọn lớp truy cập CSDL 24
Truy xuất dữ liệu từ CSDL Liên kết Object DataSource với điều khiển 25
Mã aspx của Object data source <asp:objectdatasource ID="ObjectDataSource1" runat="server" ConflictDetection="CompareAllValues" DataObjectTypeName="Category" DeleteMethod="DeleteCategory" InsertMethod="InsertCategory" OldValuesParameterFormatString="original_{0}" SelectMethod="GetCategories" TypeName="CategoryDB" UpdateMethod="UpdateCategory"> </asp:objectdatasource> Tham khảo các thuộc tính trong SGK 26
Thêm chức năng cập nhật dữ liệu cho điều khiển Thêm các button edit, delete cho GridView Thêm button Insert cho Details. Đặt chế độ mặc định cho DetailsView là Insert (gán thuộc tính DefaultMode = Insert) 27
Kiểm soát lỗi thao tác với Thêm sự kiện RowUpdated, RowDeleted cho GridView Thêm sự kiện ItemInserted cho DetailsView 28
Phương thức xử lý sự kiện RowUpdated protected void GridView1_RowUpdated( Object sender, GridViewUpdatedEventArgs e) { if (e.exception!= null) { lblerror.text = "A database error has occurred.<br /><br />" + e.exception.message; if (e.exception.innerexception!= null) lblerror.text += "<br />Message: " + e.exception.innerexception.message; e.exceptionhandled = true; e.keepineditmode = true; } else if (e.affectedrows == 0) lblerror.text = "Another user may have updated that category." + "<br />Please try again."; } 29
Phương thức xử lý sự kiện RowDeleted protected void GridView1_RowDeleted( object sender, GridViewDeletedEventArgs e) { if (e.exception!= null) { lblerror.text = "A database error has occurred.<br /><br />" + e.exception.message; if (e.exception.innerexception!= null) lblerror.text += "<br />Message: " + e.exception.innerexception.message; e.exceptionhandled = true; } else if (e.affectedrows == 0) lblerror.text = "Another user may have updated that category. " + "<br />Please try again."; } 30
Phương thức xử lý sự kiện ItemInserted protected void DetailsView1_ItemInserted( object sender, DetailsViewInsertedEventArgs e) { if (e.exception!= null) { lblerror.text = "A database error has occurred.<br /><br />" + e.exception.message; if (e.exception.innerexception!= null) lblerror.text += "<br />Message: " + e.exception.innerexception.message; e.exceptionhandled = true; } } 31
32
Triển khai ứng dụng ASP.NET Triển khai (Deploy) là quá trình copy một ứng dụng web ASP.NET từ hệ thống phát triển ứng dụng tới server chạy ứng dụng. Ba phương pháp triển khai ứng dụng: Triển khai Xcopy Triển khai tiền biên dịch Tạo Web Setup Project 33
Triển khai XCopy Copy toàn bộ File nguồn của ứng dụng tới Server Hai cách triển khai Xcopy Sử dụng lệnh Xcopy Sử dụng lệnh Copy Web site trong Visual Studio Phương pháp này thực hiện khá dễ Thường dùng để tạo bản copy của ứng dụng trên các server khác nhau để kiểm thử. Với ứng dụng nhỏ là phương pháp tốt nhất 34
Demo triển khai XCopy Mở website trong visual studio. Chọn Copy Web Site trong menu Website Click vào Button Connect để mở hộp thoại Open Web Site để chọn vị trí copy file đến Chọn các File muốn copy và sử dụng button -> để copy file 35
Triển khai tiền biên dịch Biên dịch các trang của ứng dụng, sau đó các file assembly tiền biên dịch được copy tới server. Hai cách triển khai tiền biên dịch Sử dụng lệnh Publish Web Site trong Visual Studio Sử dụng lệnh aspnet_compiler từ cửa sổ dòng lệnh Triển khai tiền biên dịch có nhiều ưu điểm hơn triển khai Xcopy Tăng hiệu năng của người dùng đầu tiên truy cập đến site. Bảo mật hơn vì file nguồn không được copy tới server 36
Demo Triển khai tiền biên dịch Trong Visual Studio. Chọn Publish Web Site trong menu Build Chọn vị trí lưu file copy Nếu chọn checkbox, các file nguồn sẽ được triển khai cùng các file có thể thực thi 37
Tạo Web Setup Project Phương pháp này tạo ra một bộ cài theo chuẩn Windows, sử dụng để cài đặt ứng dụng Web lên một IIS Server. Sử dụng khi triển khai một ứng dụng trên nhiều server Phiên bản Visual Web Developer Express không hỗ trợ phương pháp triển khai này. 38
Demo Tạo Web Setup Project Chọn File -> Add -> New Project để hiển thị hộp thoại Add New Project 39
Demo Tạo Web Setup Project Trong cửa sổ Solution Explorer, nhấn chuột phải vào Web Setup Project chọn Add -> Project Output 40
Tạo Web Setup Project Tạo chương trình cài đặt bằng cách nhấn chuột phải lên Solution Explorer chọn Build. Bộ cài tạo ra nằm trong thư mục Debug hoặc Realease của Web Setup Project, gồm 2 file Setup.exe: File chạy Setup.msi: Chứa tất cả các file được cài đặt Để cài đặt ứng dụng Web, Copy file Setup.exe và Setup.msi tới server và chạy file setup.exe 41
Tạo và cấu hình thư mục ảo trong IIS Để Client có thể truy cập đến server, các file ứng dụng phải được copy đến thư mục gốc của Web server (C:\inetpub\wwwroot) Để Client có thể truy cập đến một website không nằm trong thư mục gốc, ta tạo một thư mục ảo trong IIS để trỏ tới thư mục chứa các file của website 42
Demo Tạo và cấu hình thư mục ảo trong IIS7 Các bước tạo và cấu hình thư mục ảo Tạo thư mục ảo (Virtual Directory) trong IIS Chuyển thư mục ảo thành ứng dụng Cấu hình xác thực Tạo Application Pool Gán Applicaton Pool cho ứng dụng Kích hoạt directory browsing Thiết lập trang chạy mặc định 43
Demo Tạo và cấu hình thư mục ảo trong IIS7 Tạo thư mục ảo trong IIS Mở IIS: Vào Run -> Inetmgr -> OK Site -> Default Web Site. Nhấn chuột phải chọn Add Virtual Directory Nhập tên thư mục ảo tại mục Alias. Chọn đường dẫn chỉ đến thư mục gốc của Web site tại mục Physical Path 44
Demo Tạo và cấu hình thư mục ảo trong IIS7 Chuyển thư mục ảo thành ứng dụng Nhấn chuột phải vào thư mục ảo trên IIS Chọn Convert to Application 45
Demo Tạo và cấu hình thư mục ảo trong IIS7 Cấu hình xác thực Chọn Authentication trong vùng giao diện chính Thay đổi trạng thái Enable/Disable 46
Demo Tạo và cấu hình thư mục ảo trong IIS7 Tạo Application Pool Chuột phải vào Application Pools. Chọn Add Applicaation Pool Thiết lập các thông số Name,.NET Framwork version, và Managed pinplline mode trong hộp thoại Add Application Pool Chọn Advanced Setting ở khung Actions bên phải. Thay đổi Identity của Application Pool thành Local System 47
Demo Tạo và cấu hình thư mục ảo trong IIS7 Gán Application Pool cho ứng dụng Nhấn chuột phải vào tên thư mục ảo trong IIS Chọn Manage Application -> Advanced Setting Chọn Application Pool cho ứng dụng tại mục Application Pool trong hộp thoại Advanced Setting 48
Demo Tạo và cấu hình thư mục ảo trong IIS7 Kích hoạt directory browsing Nhấn đúp chuột vào biểu tượng Directory browsing trên vùng làm việc chính Chọn Enable trong khung Actions phía bên phải IIS 49
Demo Tạo và cấu hình thư mục ảo trong IIS7 Chạy thử ứng dụng http://localhost/virtualdirectorytest/order.aspx 50
Demo Tạo và cấu hình thư mục ảo trong IIS7 Thiết lập trang chạy mặc định Chọn Default Document trong vùng làm việc chính Chọn mục Add trong khung Actions ở phía bên phải Nhập tên trang thiết lập để chạy mặc định 51
Demo Tạo và cấu hình thư mục ảo trong IIS7 Chạy ứng dụng trên các trình duyệt http://localhost/virtualdirectorytest/ Tên thư mục ảo 52
Chỉnh sửa File Web.config File Web.config chứa các thông tin cấu hình của ứng dụng Khi triển khai ứng dụng, bạn phải chỉnh sửa file web.config phù hợp với môi trường server. Ví dụ: Sửa chuỗi kết nối CSDL Phương pháp chỉnh sửa file web.config Chỉnh sửa bằng các trình soạn thảo: notepad, visual studio Sử dụng Web Site Administration Tool Chọn Website -> ASP.NET configuration trong visual studio 53
Giới thiệu các kỹ thuật lập trình ASP.NET khác Các kỹ thuật lập trình ASP.NET khác AJAX: Nhóm AJAX Webpart: Nhóm Webpart Cung cấp các điều khiển để tạo các web site cho phép người dùng chỉnh sửa nội dung, giao diện, và hành vi của trang web trực tiếp trên trình duyệt Tạo báo cáo: Nhóm Reporting Xây dựng các trang quản lý tài khoản người dùng: Nhóm Login Tạo các điều khiển người dùng: UserControl Sử dụng Email Tạo các trang thông báo lỗi Điều khiển back-button 54
Tổng kết Kiến trúc ba tầng 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: Gồm các trang ASP.NET quản lý giao diện ứng dụng Tầng trung gian Lớp truy cập CSDL Lớp nghiệp vụ Tầng CSDL: CSDL của ứng dụng 55
Tổng kết Object Data Source Giống với SQL data source, Object data source cung cấp phương pháp: Truy xuất hiển thị dữ liệu từ CSDL cho người dùng Cập nhật CSDL Khác Object data source cho phép phát triển ứng dụng CSDL theo kiến trúc ba tầng Object data source truy cập dữ liệu qua lớp truy cập dữ liệu. SQL data source truy cập CSDL trực tiếp. 56
Tổng kết Triển khai ứng dụng Triển khai (Deploy) là quá trình copy một ứng dụng web ASP.NET từ hệ thống phát triển ứng dụng tới server chạy ứng dụng. Ba phương pháp triển khai ứng dụng: Triển khai Xcopy Triển khai tiền biên dịch Tạo Web Setup Project 57