Giáo trình Thiết kế web (Phần 2) - Trường Cao đẳng nghề kỹ thuật công nghệ

pdf 77 trang Gia Huy 16/05/2022 2640
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Thiết kế web (Phần 2) - Trường Cao đẳng nghề kỹ thuật công nghệ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_thiet_ke_web_phan_2_truong_cao_dang_nghe_ky_thuat.pdf

Nội dung text: Giáo trình Thiết kế web (Phần 2) - Trường Cao đẳng nghề kỹ thuật công nghệ

  1. BÀI 3: XÂY DỰNG WEB ĐỘNG Mã bài: MĐQTM23-03 Giới thiệu: Bài học này giới thiệu một trong các cách lập trình tạo web động (web có tương tác với cơ sở dữ liệu động) sử dụng đối tượng ASP.Net, ADO.Net trên môi trường Visual Studio.Net. Mục tiêu: - Cài đặt, cấu hình được IIS và ngôn ngữ lập trình Web. - Sử dụng thành thạo môi trường phát triển và lập trình web động. - Sử dụng tốt các đối tượng ASP.Net, ADO.Net, tiện ích của ngôn ngữ lập trình. - Có khả năng kết nối với cơ sở dữ liệu. - Thực hiện tốt công tác an toàn lao động và vệ sinh phân xưởng. Nội dung chính: 1.Tổng quan về ASP.Net và ADO.Net: Mục tiêu: Giới thiệu tổng quan về công nghệ phát triển web động bằng Asp.Net và Ado.Net, giới thiệu về nền tảng .Net Framework, cách cài đặt, cấu hình máy chủ web ảo IIS. Giới thiệu môi trường lập trình web – bộ Visual Studio .Net. 1.1. Tổng quan về ngôn ngữ ASP.Net: 1.1.1. Giới thiệu ASP.Net (Active Server Page. Net): a) Các mô hình code trong trang ASP.NET Một trang Web bao gồm hai phần MarkUp Code và Programming code. Khi duyệt một trang ta thấy phần layout của nó trên trình duyệt. Phần layout được thiết kế bởi các thẻ markup. Programming code được viết cho sự điều khiển sự tương tác của người sử dụng và một số sự kiện. - MarkUp file chỉ dẫn cho trình biên dịch cách biên dịch và xử lý trang ASP.NET. - Programming code bao gồm các kỹ thuật xử lý sự kiện khác nhau. MarkUp code và Programming code có thể ở trên cùng một trang hoặc trên các trang khác nhau. Dựa vào đó người ta chia Web Page ra làm hai dạng: - Single File Page: chứa cả MarkUp code và Programming code trên cùng một trang. - Code Behind Page: IDE sẽ tạo ra hai file MarkUp (có phần mở rộng là .aspx chứa markup code) và Class (phần mở rộng là .aspx.cs, .aspx.vb, chứa logic lập trình. Markup file chứa tham chiếu đến Code Behind file nên 2 file này được liên kết với nhau. File Code Behind tự động tạo Partial Class. Từ khóa Partial chỉ định lớp này không chứa đầy đủ các thành phần mà nó được kế thừa từ lớp Page. 35
  2. Lớp Page: dẫn xuất từ lớp Page thuộc namespace "System.Web.UI“, được kế thừa các thuộc tính, các phương thức và các sự kiện của lớp này. Thuộc tính Mô tả ID Chỉ định hoặc truy xuất định danh đối tượng của lớp Page. Title Chỉ định hoặc truy xuất tiêu đề của trang Server Truy xuất đến thể hiện của lớp Server Session Truy xuất đến thể hiện của lớp Session đối với Session hiện tại. Truy xuất đến thể hiện của lớp ControlCollection cho tất cả các Controls điều khiển Server Controls. Chỉ định hoặc truy xuất đến trang Error mà trang này được điều hướng ErrorPage đến khi có lỗi xảy ra. Phương thức Mô tả HasControls Kiểm tra xem có tồn tại các controls trên trang hay không. LoadControl Load một thể hiện của lớp Control GetValidators Trả về tập các đối tượng Validator liên quan đến nhóm Validation chỉ định. MapPath Trả về đường dẫn ảo ánh xạ đến. Trong đó cấu trúc cơ bản của file .aspx cho cả hai dạng bao gồm các chỉ dẫn trang, script code và user interface code. b) Các chỉ dẫn (Directives) Các chỉ dẫn là các câu lệnh mô tả ứng dụng ASP.NET được biên dịch như thế nào. Các chỉ dẫn được bao trong cặp và thuộc file .aspx. Các chỉ dẫn tốt nhất nên khai báo ở vị trí đầu tiên trên trang. Sau đây là một số chỉ dẫn: Chỉ dẫn Mô tả @Page Định nghĩa các thuộc tính cho Web Page @Import Import một tên miền cho trang @Assembly Liên kết một Assembly với trang hoặc với một điều khiển @Master Định nghĩa các thuộc tính của Master. @Reference Liên kết một trang, một điều khiển tới trang hiện tại @Register Khai báo một điều khiển của người dùng. - Chỉ dẫn @Page: Page là chỉ dẫn các thuộc tính của trang. Mỗi thuộc tính 36
  3. được gán một giá trị, theo đó mà trang ASP.NET sẽ được biên dịch. Thuộc tính Diễn giải Ví dụ Là thuộc tính chỉ định đường CodeFile dẫn file Code Behind. mặc định là true Tổng quát: Ta có cách khai báo chỉ định @Page: =“ ” %> - Chỉ dẫn @Import: khai báo thêm các không gian tên miền vào Page. Khi khai báo chỉ dẫn @Import, tất cả các Class của không gian tên sẽ sẵn sàng trong khi lập trình. Ðể khai báo chỉ dẫn @Import, bạn có thể sử dụng cú pháp sau: Mỗi không gian tên bạn sử dụng một khai báo chỉ dẫn @Import. Nếu có nhiều không gian tên cần thêm vào Page bạn sẽ sử dụng nhiều khai báo @Import. Tuy nhiên, bạn chỉ cần khai báo @Import với các không gian tên mà .NET Framework tuỳ chọn. Ðiều này có nghĩa là những không gian tên sau đây tự động thêm vào trang. System System.Collection.Specialized System.IO System.Text.RegularExpression System.Collections System.Configuration System.Text System.Web System.Web.Security System.Web.UI System.Web.UI.WebControls System.Web.SessionState System.Web.UI.HtmlControls c) Điều khiển các sự kiện trong Web pages: Mỗi một Web page có một vòng đời, mỗi bước trong vòng đời xuất hiện một sự kiện. Các sự kiện được xử lý tự động bởi các Event Handler tương ứng. Sau đây là một số sự kiện tự động điều khiển trong Webpages: Init -> Load ->PreRender->UnLoad. 37
  4. - Init: Là sự kiện đầu tiên trong vòng đời của trang web. T hường dùng khởi tạo tất cả các điều khiển trong trang web. Init cũng còn được dùng đối với các biến cần được khai báo và khởi tạo trước khi xử lý Web page. - Load: Là sự kiện xảy ra sau sự kiện Init. Thực hiện bất cứ khi nào Web Page được Request. Khi một người dùng Request một trang Web thì các biến và các điều khiển trong trang được khởi tạo và sau đó trang đó được load lên. - PreRender: Là sự kiện được thực hiện trước khi trang được submit (đệ trình) cho người sử dụng. - UnLoad: Là sự kiện xảy ra sau khi trang được submit cho người dùng. Chú ý: Trong tiến trình xử lý các sự kiện của trang liên quan đến một khái niệm đó là PostBack. - PostBack là thông tin được submit từ Browse đến Server. Khi người dùng Submit thông tin bằng cách click vào một nút lệnh hoặc chọn một item trên lưới thì Browse sẽ chuyển thông tin này đến server. Khi người dùng tương tác với Web Page bằng cách phát sinh một sự kiện thì trang đó được gửi quay trở lại Server. Server xử lý code hiện tại trong các event handlers và sau đó trang này được tạo lại. Như vậy trang này lại trải qua một vòng đời mới với các sự kiện Init() và Load () - Thuộc tính IsPostBack dùng để kiểm tra Web Page được Request lần đầu tiên hay là kết quả của một PostBack. Nếu trang đó được Request lần đầu tiên thì thuộc tính IsPostBack nhận giá trị false. Nếu trang đó được submit quay trở lại từ Server thì thuộc tính IsPosstBack nhận giá trị True 1.1.2. Giới thiệu .Net Framework: .NET Framework là cơ sở hạ tầng cung cấp cho người dùng cách thức sử dụng đa ngôn ngữ lập trình để truy cập thông tin, file, hoặc các chương trình của họ ở mọi lúc mọi nơi trên mọi cấu hình phần cứng và thiết bị. Tâm điểm của .NET Framework là CLR (Common Language Runtime) và tập phân cấp các bộ thư viện hợp nhất và ASP.NET. CLR quản lý sự thực thi của đoạn mã .NET và cung cấp các dịch vụ tạo quá trình phát triển chương trình ứng dụng dễ dàng hơn. Các trình biên dịch và các công cụ làm cho chức năng của thư viện thực thi runtime trở nên phong phú và hiệu quả hơn. Ngoài ra, dịch vụ Web trong .NET Framework cho phép ta phát triển ứng dụng Internet hay Intranet trong hiện tại lẫn tương lai bằng bất cứ ngôn ngữ lập trình và truy cập đến hệ thống bất kỳ. Ta có thể tham khảo tất cả những thành phần cấu thành trong .NET Framework như hình dưới đây, mức trên cùng là trình biên dịch Visual Basic hoặc các trình biên dịch của các ngôn ngữ khác trong bộ Visual Studio .NET. Có thể sử dụng Visual Studio.NET kết hợp với môi trường phát triển (Intergrated Development Environment - IDE) để lập trình ASP.NET. Visual Basic, C ++ , C # .v.v .NET Framework còn kết hợp mô hình lập trình đơn giản, dễ sử dụng với các giao thức mở và biến đổi được của Internet. 38
  5. 1.1.2. Giới thiệu môi trường lập trình Ta có thể sử dụng Microsoft Visual Studio 20xx IDE (Integrated Development Environment ) tạo các ứng dụng web ASP.NET. IDE bao gồm các tools cho việc phát triển, gỡ rối và triển khai ứng dụng. Web Page Designing: Visual Studio 20xx IDE cung cấp bộ thiết kế (Design Editor) theo hiệu ứng “What you see is What you get”, do đó rất đơn giản để tạo một web page layout. Cung cấp khả năng keó thả các thành phần vào Web Form và sinh mã code HTML tương ứng. a) Cấu hình ứng dụng với IIS: Internet Information Services (IIS) là một Web Server được phát triển bởi Microsoft để tạo host cho các websites trên một server đơn dùng để quảng bá và quản trị website trên Internet hoặc Intranet. Làm việc IIS với các ứng dụng ASP.NET: Các ứng dụng ASP.NET được lưu trữ trên một thư mục ảo của IIS. Các bước truyền thông giữa ASP.NET và IIS như sau: 1. Browse gửi Request đến IIS 39
  6. 2. IIS nhận request, tìm kiếm file tương ứng và gửi file này đến ASP.NET Script Engine. 3. Script Engine thực hiện các Server - Side Script, sinh HTML page và gửi cho IIS. 4. IIS nhận và gửi cho Browse Cấu hình IIS - Mở IIS. - Right click lên Default Web Site chọn: New\Vitual Directory và làm theo các chỉ dẫn. - Chỉ định IIS Web Project: Chỉ định trong Location là HTTP Xem các hình minh họa sau dùng để cấu hình cho thư mục web có tên Sieuthi. 40
  7. b) Biên dịch trang .Aspx: Các trang ASP.NET có đuôi là *.apsx. Khi người sử dụng lần đầu tiên triệu gọi trang ASPX, thì IIS triệu gọi trình biên dịch dịch trang ASPX (trang Code- behind) thành tập tin Class. Tiếp theo, tập tin Class này được biên dịch thành tập tin DLL. Cuối cùng, trang DLL thực thi và trả về kết quả cho người sử dụng. Trong trường hợp người sử dụng triệu gọi lại trang ASPX, thì tập tin DLL sẽ được gọi và thực thi để trả kết quả về cho người sử dụng. Trang ASPX sẽ chỉ biên dịch lại tập tin DLL khi chúng tìm thấy cấu trúc của nó thay đổi hoặc chúng không tìm thấy tập tin DLL tương ứng. c) Tạo ứng dụng ban đầu: 1. Khởi động Visual studio, File\ New Web site. Ta thấy hộp thoại New Web Site như hình sau: 2. Trong hộp thoại New Web Site, chọn ASP.NET Web Site và ngôn ngữ Visual Basic (hoặc C#, ) . 3. Click File System trong hộp Location, click Browse, và sau đó chỉ định đường dẫn đến thư mục lưu trữ. 4. Click OK để hoàn thành các thay đổi. 41
  8. Visual Studio nạp Visual Web Developer và tạo một Web page. Mỗi một Web page chứa hai phần: - Một Web Forms page, chứa HTML và các điều khiển để tạo giao diện người sử dụng. - file code-behind, chứa các module code, chứa program code trong Web Forms page. Tương ứng với nó là hai file được mặc định là: file Default.aspx chứa giao diện người sử dụng và file Default.aspx.vb chứa phần code cho Web page này. Ngoài web pages, web sites có thể chứa các modules (.vb files, .cs files), HTML pages (.htm files), configuration information (Web.config file), global Web application information (Global.asax file),và các thành phần khác. Ta có thể sử dụng Web Page Designer và Solution Explorer để chuyển đổi giữa các thành phần này một các nhanh chóng và hữu hiệu. Trong cửa sổ Web Page Designer, HTML source code cho Web page được hiển thị trên tab Source. Tab Design dùng để hiển thị Web page như khi trên Web browser. Khi tab Design được chọn thì một trang trắng xuất hiện đó là kết quả của phần code khởi tạo. Ta có thể thiết kế thêm các điều khiển và điều chỉnh các đối tượng trên trang. Ta sử dụng trang *.aspx.vb hoặc *.aspx.cs để viết mã code cho trang. d) Thêm web page: Để thêm một trang vào web site ta thực hiện các bước sau: 1. Click vào menu Website chọn Add New Item (Hoặc trong cửa sổ Solution Explorer, right click, và chọn Add New Item). Xuất hiện cửa sổ Add New Item như hình sau: 42
  9. Trong cửa sổ này ta thực hiện các lựa chọn - Mục Templates: Chọn Web form - Mục Name: Đặt tên cho trang - Mục Language: Chọn ngôn ngữ lập trình. - Chọn: Place code in separate file mặc định là tách trang này ra làm 2 file như đã mô tả trên. Trong trường hợp không tách ta có thể bỏ lựa chọn này. Khi bỏ lựa chọn này thì HTML và các điều khiển để tạo giao diện người sử dụng cùng với code nằm trên cùng một file. 1.2 Mô hình ADO.Net Khi làm việc với .NET để phát triển các ứng dụng web thì sự nỗ lực của bạn để điều khiển dữ liệu sẽ là nhỏ nhất. Bởi vì, ASP.NET cung cấp các đối tượng ActiveX Data Objects cho .NET (ADO.NET), một tập hợp các công nghệ truy xuất dữ liệu là một phấn của .NET Framework, giúp cho việc điều khiển và làm việc với dữ liệu trở lên dễ dàng hơn. ADO.NET được thiết kế để cung cấp kiến trúc rời rạc (disconnected architecture). Có nghĩa là các ứng dụng connect tới database truy nạp dữ liệu và lưu trữ trong memory. Sau đó disconnect với database và sử dụng bộ nhớ sao chép (memory copy) của dữ liệu đó. Nếu như database cần phải được update với các thay đổi trên memory copy, một kết nối mới (connection) được hình thành và database được update. Bộ nhớ chính lưu trữ dữ liệu là DataSet, nơi mà chứa các bộ nhớ lưu trữ dữ liệu khác, 43
  10. như là: Các đối tượng DataTable; ta có thể lọc và sắp xếp dữ liệu trên DataSet bằng việc sử dụng các đối tượng DataView, Chúng ta sẽ tìm hiểu về ADO.net sâu hơn ở phần sau. 2. Các đối tượng ASP.Net: Mục tiêu: Sử dụng tốt các đối tượng ASP.Net hỗ trợ lập trình. 2.1. ASP.Net Web Server Controls: 2.1.1. Giới thiệu các điều khiển web a) Server Controls và HTML Controls Server Controls: có nhiều khả năng hơn HTML controls và chức năng của nó trong một số cách giống như Windows Forms controls. Nhiều điều khiển server controls có cùng tên như các điều khiển Windows Forms controls và cùng cấp nhiều thuộc tính, phương thức và sự kiện giống nhau, thêm vào đó là các điều khiển như FileUpload, LoginView, và RequiredFieldValidator. HTML Controls: là một tập hợp các điều khiển giao diện người dùng trước đây mà được hỗ trợ bởi hầu hết các trình duyệt web và phù hợp với chuẩn HTML phát triển cho việc quản lý các phần tử giao diện người dùng trên các trang web điển hình. Chúng bao gồm: Button, Text Field, Checkbox và các điều khiển cơ sở hữu ích cho việc quản lý thông tin trên một trang Web mà có thể được trình bày hoàn toàn bằng mã code HTML. b) ASP.NET Web Server Controls Khi tạo trang ASP.NET Web pages, ta có thể sử dụng các kiểu controls: - Web server controls Controls có nhiều tính năng cài sẵn hơn HTML server controls. Web server controls không chỉ bao gồm các điều khiển như buttons and text boxes, mà còn các điều khiển cho mục địch đặc biệt như calendar, menus và tree view control. Web server controls có nhiều tính năng trừu tượng hơn HTML server controls. - HTML server controls Các phần tử HTML có thêm tính năng tương tác trên trình chủ (server) vì vậy ta có thể lập trình chúng. HTML server controls trưng bày một đối tượng mà ánh xạ rất gần tới các phần tử HTML mà chúng hoàn trả. - Validation controls Controls kết hợp logic cho phép ta kiểm soát những gì mà người dùng chèn vào các điều khiển Input như điều khiển TextBox. Validation controls cho phép ta kiểm tra quy định của một trường, kiểm tra dựa vào một giá trị đặc biệt, hoặc một mẫu ký tự, kiểm tra xem một giá trị nào đó có nằm trong một phạm vi hay không, .v.v - User controls Controls mà được tạo như ASP.NET Web pages. Ta có thể nhúng ASP.NET user controls trên các trang ASP.NET Web pages khác. Đây là cách đơn giản để tạo toolbars và các phần tử được sử dụng lại khác. - Và một số nhóm điều khiển khác như: Data, Navigation, login, 2.1.2. Web Server controls Các điều khiển Web Server cung cấp giao diện đồ họa (Graphical User Interface). Các điều khiển này được sử dụng để cung cấp giao diện và chức năng cho web form. Sau đây là danh sách các điều khiển Web server hay sử dụng: Tên Một số thuộc tính, phương Mô tả điều khiển thức và sự kiện 44
  11. Cho phép hiển thị nhãn trên Lable Text Property Web Form Properties: AccessKey, Điều khiển này thường được sử AutoPostBack, MaxLength, TextBox dụng để nhận input từ người sử Text, TextMode dụng Event: TextChanged Điều khiển Button chủ yếu được sử Properties: AccessKey, Text, Button dụng để Submit thông tin lên Enable Server Event: Click, Command Properties: ImageUrl, Điều khiển Image cho phép hiển Image AlternateText, ImageAlign, thị ảnh trên Web page ToolTip Properties: ImageUrl, Điều khiển ImageButton cho phép AlternateText, ImageAlign, ImageButton tạo Button dạng ảnh trên Web page OnClientClick Event: Click, Command Điều khiển LinkButton cho phép Properties: PostBackURL, Text, OnClientClick, LinkButton hiển thị trên Web page một nút lệnh Event: Click, Command dưới dạng HyperLink Điều khiển Panel được sử dụng Properties: Controls, Pannel giống như một container chứa GroupingText, các điều khiển Web Server khác. Properties: AutoPostBack, Điều khiển cho phép chọn hay CheckBox Checked, Text. không chọn. Event: CheckedChanged Điều khiển RadioButton được sử Properties: AutoPostBack, RadioButton dụng để chọn một trong nhiều lựa Checked, Text, GroupName chọn khác nhau. Event: CheckedChanged Điều khiển CheckBoxList được Properties: AutoPostBack, xét như một nhóm các điều Items, Text, SelectedIndex, CheckBoxList CheckBox có liên quan với SelectedValue nhau. Method: ClearSelection Properties:Event: SelectedIndexChanged AutoPostBack, RadioButtonLis Tương tự như một nhóm các Items, Text, SelectedIndex, t điều khiển RadioButton SelectedValue Method: ClearSelection Event: SelectedIndexChanged 45
  12. Properties: AutoPostBack, Items, SelectedIndex, Điều khiển ListBox được sử SelectedValue, ListBox dụng cho phép lựa chọn nhiều phần SelectionMode tử trong một danh sách cho trước. Method: ClearSelection(), GetSelectedIndices() Event: SelectedIndexChanged Điều khiển DropDownList là điều Properties: AutoPostBack, Items, SelectedIndex, SelectedItem, Text khiển cho phép chọn một phần tử DropDownList Method: ClearSelection() trong danh sách các phần tử thả Event: SelectedIndexChanged xuống. Properties: DayHeaderStyle, Điều khiển Calendar là điều khiển Calendar DayNameFormat, cho phép hiển thị lịch trên Browse SelectedDate, SelectionMode. là điều khiển đặc biệt của AdRotator ASP.NET cho phép hiển thị các banner quảng cáo. Properties: Items, Orientation, PathSeparator, Là điều khiển dùng để điều Menu StaticDisplayLevels hướng các trang trong WebSite Method:: FindItem() Event: MenuItemClick Properties: Nodes, ShowCheckBoxes, SelectedValue,NodeStyle, Điều khiển TreeView được xem ShowLines, SelectedNode như một menu có thể mở rộng TreeView Method:: FindNode() và thu hẹp giống như thanh trái Event: SelectedNodeChanged, của cửa sổ Explorer. TreeNodeCollapsed, TreeNodeExpanded, TreeNodeCheckChanged Properties: HotSpotMode, ImageMap cho phép tạo các HotSpot, ImageURL, ImageMap điểm nóng ảnh có khả năng AlternateText. clickable. Event: Click Properties: HasFile, FileUpload cho phép định vị và Upload các file FileName, PostedFile, Method: SaveAs() Điều khiển này thường được sử View dụng giống như một container chứa các điều khiển khác. 46
  13. Properties: ActiveViewIndex, Một điều khiển MultiView chứa Views. Method: MultiView một hoặc nhiều View SetActiveView Event: ActiveViewChanged Sử dụng control AdRotator: Quảng cáo là một trong những cách tạo ra những lợi nhuận cho nhà sở hữu website. AdRotator cho phép chọn ngẫu nhiên các ảnh đặt lên trang web quảng cáo, để làm được điều này trước tiên ta phải tạo danh sách các file ảnh cần đưa lên trang web quảng cáo. Danh sách này được đặt trong một file XML (vào menu Website\Add New Item\ và chọn Template là XML file – ads.XML) theo cấu trúc sau: Ví dụ. Sử dụng control AdRotator: a) file ads.XML ~/ads/yahooCall.gif Vidu2_5.aspx Click here to visit our sponsor. 1 A ~/ads/yahooCall.png //www.gotdotnet.com ASP.NET tutorials and more. 5 B Trong đó các thẻ được sử dụng cho trong bảng sau. Bảng các thẻ của Advertisements Tag Ý nghĩa Bắt đầu thẻ Ad Địa chỉ của Ad để hiển thị (địa chỉ file ảnh) Địa chỉ điều hướng nếu người sử dụng click vào Ad Text để hiển thị như là ToolTip nếu người sử dụng di chuột trên Ad. Và nếu địa chỉ ImageUrl không thể hiển thị thì dòng text này sẽ hiển thị thay thế. Một tên category sử dụng cho việc lọc các Ads khi hiển thị. Một số thể hiện khả năng một Ad sẽ được hiển thị. Các Ads với số càng cao thì khả năng hiển thị càng nhiều. b) file vidu2_2.aspx 47
  14. title> Hello My web 2.1.3. Web HTML Server Control: Theo mặc định các thẻ HTML được sử dụng để tạo các điều khiển HTML tương ứng trên các ứng dụng ASP.NET và được xét như là plain text, không thể code bên server –side. HTML Server Controls cung cấp để truy xuất vào các thuộc tính và tính chất của các thẻ HTML. HTML Server Controls trong ASP.NET là tập các điều khiển tương ứng các thẻ HTML, chúng được khai báo trên Web page bằng cách thêm thuộc tính runat=“Server”. Sau đây là một số class hay sử dụng của nhóm điều khiển HTML Server: Class Mô tả HtmlButton Cho phép lập trình sử dụng thẻ HTML trên Server HtmlForm Cho phép lập trình sử dụng thẻ HTML trên Server Cho phép lập trình sử dụng thẻ HTML HtmlInputButton , trên Server Cho phép lập trình sử dụng thẻ HTML HtmlInputText trên Server HtmlTable Cho phép lập trình sử dụng thẻ HTML trên Server HtmlSelect Cho phép lập trình sử dụng thẻ HTML trên Server Một câu hỏi đặt ra là ta nên sử dụng HTML Controls hay ASP.NET Server Controls? Cả hai loại đều sinh ra mã ánh xạ vào các phần tử HTML như nhau. Câu hỏi này liên quan đến các phần tử đơn trên một trang, như thẻ text box, the button, tables, .v v Và được các nhà phát triển kiến trúc ASP.NET của Microsoft trả lời rằng: Mục đích là sử uyển chuyển, sử dụng loại điều khiển nào tùy thuộc vào mục đích, tình huống sử dụng, và thói quen của người sử dụng. Server controls và HTML controls đưa ra các chức năng chồng chéo lên nhau. Tổng quát, làm việc với Server controls thường dễ dàng hơn. Bảng sau đưa ra danh sách các Server controls và HTML controls với các task lập trình. Task Server controls HTML controls 48
  15. Label, Text Field, Text Hiển thị text Label, TextBox, Literal Area, Password Field Hiển thị tables Table, DataGrid Table DropDownList, ListBox, Chọn từ danh sách List Box, Dropdown DataList, Repeater Button, LinkButton, Button, Reset Button, Thực thi lệnh ImageButton Submit Button CheckBox, CheckBoxList, Set values Checkbox, Radio Button RadioButton, RadioButtonList Hiển thị images Image, ImageButton Image Navigation Hyperlink none (use tags in text) Group controls Panel, Placeholder Flow Layout, Grid Layout Làm việc với dates Work with dates none Hiển thị ads AdRotator none (Quảng cáo) Hiển thị horizontal Literal Horizontal Rule rules Lấy filenames từ None File Field client (provided by state Store data on page Input Hidden management) RequiredFieldValidator, CompareValidator, RangeValidator, none (use page- level Validate data RegularExpressionValidator, scripts) CustomValidator,ValidationS ummary 2.1.4. Validation Controls: Validation Controls là các điều khiển đảm bảo sự xác nhận tính hợp lệ của dữ liệu được nhập vào. Một số điều khiển kiểm tra tính hợp lệ - RequiredFieldValidator: RequiredFieldValidator là điều khiển đảm bảo người dùng nhập dữ liệu trên các điều khiển Input. Nếu người dùng không nhập dữ liệu trên điều khiển Input mà liên kết với điều khiển RequiredFieldValidator thì tiến trình của trang sẽ bị dừng lại cho đến khi dữ liệu được nhập vào. - CompareValidator là điều khiển dùng để so sách giá trị của một điều khiển Input với một điều khiển Input khác hoặc với một giá trị hằng. Ta có thể sử dụng thuộc tính Type quy định kiểu dữ liệu của các giá trị nhập vào để so sánh như: String (mặc định), Integer, Double, Date và Currency. 49
  16. - RangeValidator là điều khiển được ASP.NET cung cấp để kiểm tra giá trị người dùng nhập vào có nằm trong phạm vi được chỉ định hay không? Điều khiển này kiểm tra tính hợp lệ của các giá trị dạng numeric, character và date. - RegularExpressionValidator là điều khiển dùng để kiểm tra tính hợp lệ của giá trị trên điều khiển Input theo một khuôn mẫu của biểu thức. Ví dụ, expression có thể là pattern của phone number, mail Address, - CustomValidator là điều khiển dùng để kiểm tra tính hợp lệ của giá trị nhập trên điều khiển Input có hợp lệ theo một logic đã chỉ định hay không. Ta có thể dùng điều khiển này để kiểm tra số chẵn, lẻ, nguyên tố, - ValidationSummary là điều khiển dùng để xem lại các thông báo lỗi xuất hiện trên các điều khiển Validation khác. Điều khiển ValidationSummary tổng hợp và hiển thị tất cả các thông báo lỗi trên một trang. 2.2. Các đối tượng trong ASP.NET 2.2.1. Đối tượng Request Ðối tượng Request dùng để nhận thông tin yêu cầu được gửi từ Client Side đến Server Side. Nó được cài đặt trong lớp HttpRequest thuộc tên miền System.Web. Khi sử dụng đối tượng Request ta có thể sử dụng các thành phần (collection) và thuộc tính của nó cho trong bảng sau: Thuộc tính/ Mô tả Phương thức Trả về đường dẫn ảo của yêu cầu, thuộc tính này tương đương vơi FilePath SCRIPT_NAME trong ASP. Trả về HttpFileCollection của tập nhiều tập tin được tải lên Files Server (sử dụng cho dạng multi- part/forms). Trả về một tập dữ liệu của nội dung từ Form Form(NameValueCollection). Tham khảo Request Collection trong phần kế tiếp. Thuộc tính này sử dụng để lấy giá trị của phương thức trong Params Form, QueryString, ServerVariable hay Cookie Ðường dẫn ảo của yêu cầu, tương đương với Path PATH_INFO trong ASP. Ðường dẫn ảo của yêu cầu, tương đương với PathInfo PATH_INFO trong ASP. PhysicalApplicat Ðường dẫn vật lý của thư mục gốc, tương đương với ionPath APPL_PHYSICAL_PATH Ðường dẫn vật lý của yêu cầu, tương đương với PhysicalPath PATH_TRANSLATED trong ASP. Trả về một tập dữ liệu của nội dung từ QueryString QueryString (NameValueCollection). Cách truy cập tập dữ liệu này khác với truy cập tập dữ liệu từ Form của ASP. TotalBytes Dung lượng của Stream trong luồng dữ liệu. 50
  17. Ðối tượng Url chứa đựng chi tiết của yêu cầu. Ðối tượng Url (từ Url không gian tên System) bao gồm các thông tin chi tiết như Port, DNS, Ðịa chỉ IP của người sử dụng, tương đương với UserHostAddress REMOTE_ADDR trong ASP. Tên DNS của người sử dụng, tương đương với UserHostName REMOTE_NAME trong ASP. MapPath() Chuyển đổi đường dẫn ảo thành đường dẫn vật lý. SaveAS() Lưu yêu cầu HTTP vào đĩa. QueryString: QueryString được định nghĩa là một chuỗi nằm sau dấu? trong chuỗi URL (Uniform Resource Locator) trên phần Address của trình duyệt khi triệu gọi đến một trang Web. Ví dụ: Ta gọi triệu địa chỉ sau: 03/ex5.asp?al=A&page=cust Trong đó, QueryString bao gồm các cặp tham số và giá trị sau: al=A&page=cust Các tham số được khai báo cách nhau bằng ký tự & và giá trị của mỗi tham số được khai báo sau dấu = của mỗi tham số. - Nếu tham số không có dấu bằng theo sau, giá trị của tham số đó sẽ được trả về khi sử dụng Request.QueryString là null. - Trong trường hợp có dấu bằng nhưng không tồn tại giá trị thì kết quả trả về khi sử dụng Request.String là rỗng. Ðối tượng Request cho phép truy cập đến nội dung của Form hay QueryString, trong đó bao gồm các phần tử cùng tên như trong các trình bày chúng ta sử dụng thẻ checkbox, radio,.v.v cùng tên và khác giá trị. 2.2.2. Đối tượng Response: Ðối tượng Respose dùng để gửi thông tin ngược trở lại Client Side từ Server Side. Nó được cài đặt trong lớp HttpResponse thuộc tên miền System.Web. Các thuộc tính và phương thức hay sử dụng đối với đối tương này cho trong bảng sau: Thuộc tính/ Mô tả Phương thức Thuộc tính này chỉ định thời gian trước khi trang đó được lưu Expires trong bộ nhớ Catch của trình duyệt. Người sử dụng có thể trở lại các trang trước đó khi khoảng thời gian này chưa hết. Chỉ định nội dung phúc đáp. Thuộc tính cho phép nhận ContentType và thiết lập kiểu Multipurpose Internet Mail Extension (MIME) của Response (mặc định là “text/html”). Thuộc tính cho phép nhận tập hợp các cookies dược truyền tới client trong Response Cookies Public ReadOnly Property Cookies() As System.Web.HttpCookieCollection 51
  18. Chuyển hướng đến địa chỉ file trong cùng ứng dụng hay URL Redirect() khác trong lúc thi hành. Ghi thông tin từ các kiểu dữ liệu như Char, Object, String, Write() Array ra trang Web. Flush() Phương thức này gửi Buffer của Response đến client. 2.2.3. Đối tượng Server: Đối tượng Server thể hiện các phương thức tiện ích đa dạng để chuyển đổi điều khiển giữa các trang, giải mã HTML text, nhận thông tin lỗi, Đối tượng Server thuộc lớp HttpServerUtility thuộc không gian miền System.Web - Lớp HttpServerUtility cung cấp các phương thức cho các tác vụ như tiến trình xử lý các yêu cầu, mã hóa và giải mã các chuỗi URL, truy cập các thông tin lỗi, Lớp HttpServerUtility cung cấp hai thuộc tính: + MachineName: Trả về tên Server mà ứng dụng đang chạy. Public ReadOnly Property MachineName() As String + ScriptTimeout: Lấy hoặc thiết lập thời gian (tính bằng giây) mà một Request timeout đã xác định. Public Property ScriptTimeout() As Integer Ví dụ: Response.Write("Time Out:" + Server.ScriptTimeout.ToString) Một số phương thức của lớp HttpServerUtility thường được sử dụng đó là: + Execute: Là phương thức xử lý trang Web được chỉ định trên ngữ cảnh (context) của current Request. Public Sub Execute(ByVal path As String) path: Là URL path cần được thực thi. + HtmlEncode: Là phương thức mã hóa chuỗi ký tự để hiển thị trên trình duyệt. Có hai dạng hàm: Public Function HtmlEncode(ByVal s As String) As String Dùng để mã hoá chuỗi s và trả về chuỗi đã mã hóa. Ví dụ: str = "Xin chào " strE = Server.HtmlEncode(str) Response.Write("Bản gốc:" + str) Response.Write("Bản mã:" + strE) Public Sub HtmlEncode(ByVal s As String, ByVal output As System.IO.TextWriter)>> Dùng để mã chuỗi s và trả về chuỗi đã mã hóa cho output. Ví dụ: Dim out As New System.IO.StreamWriter("E:\Test.txt") Server.HtmlEncode("Xin chao ", out) Server.HtmlDecode("Xin chao ", out) out.Flush() + MapPath: Là một hàm trả về đường dẫn vật lý. Public Shared Function MapPath(ByVal virtualPath As String) As String Ví dụ: Response.Write(Server.MapPath("\Testing")) + UrlEncode: Là phương thức mã hóa chuỗi URL: Public Function UrlEncode(ByVal s As String) As String Public Sub UrlEncode(ByVal s As String, ByVal output As System.IO.TextWriter) 2.2.4. Đối tượng Application 52
  19. Đối tượng Application được sử dụng để tham chiếu đến thể hiện của lớp HttpApplicationState. Application State (trạng thái ứng dụng) lưu trữ toàn bộ thông tin sử dụng qua lại giữa nhiều phiên giao dịch (Session) và các yêu cầu (request). Đối tượng Application nắm hầu hết các thông tin được sử dụng cho nhiều trang của ứng dụng. Lớp HtttpApplicationState thuộc không gian miền System.Web. Lần đầu tiên Client yêu cầu tài nguyên URL từ thư mục ảo của ứng dụng ASP.NET thì một thể hiện của lớp HttpApplicationState được tạo. a) Các thuộc tính của đối tượng Application: Đối tượng Application sẽ thể hiện các thuộc tính của lớp HtttpApplicationState. Một vài các thuộc tính quan trọng của lớp này là: - AllKeys: Truy xuất các Access Keys từ tập các trạng thái ứng dụng. Đoạn code sau minh họa cách sử dụng thuộc tính AllKeys. Dim strKeys(Application.Count) As String strKeys = Application.AllKeys - Contents: truy xuất tham chiếu đến đối tượng HttpApplicationState. Application.Contents.RemoveAll() - Count: đếm và truy xuất số các đối tượng. intObj=Application.Count - Item: Truy xuất đến một đối tượng cụ thể trong tập hợp HttpApplicationState. Application.Item("User") = "Huongct" Response.Write(Application("User") & " ") Response.Write(Application(0) & " ") Chú ý: Cách truy xuất Application.Item("User") tương đương với Application("User") và tương đương với Application(0) trong đó 0 là chỉ số Index của đối tượng đầu tiên trong tập hợp. b) Phương thức của lớp “HttpApplicationState: Sau đây là một số phương thức quan trọng của lớp HttpApplicationState: - Add: Là phương thức thêm một đối tượng mới vào tập trạng thái ứng dụng. Public Sub Add(ByVal name As String, ByVal value As Object) Đoạn code sau minh họa cách sử dụng phương thức Add Application.Add(“UserName”, “Huongct”) - Clear: Là phương thức xóa tất cả đối tượng trong tập trạng thái ứng dụng. Cú pháp của phương thức Clear là: Public Sub Clear() Đoạn code sau minh họa cách sử dụng phương thức: Application.Clear() - Remove: Là phương thức xóa một đối tượng chỉ định trong tập trạng thái ứng dụng. Cú pháp của phương thức là: Public Sub Remove(ByVal name As String) Đoạn code sau minh họa cách sử dụng phương thức: Application.Remove(“UserName”); - RemoveAll Method: Là phương thức xóa tất cả đối tượng trong tập trạng thái ứng dụng. Cú pháp của phương thức là: Public Sub RemoveAll() Đoạn code sau minh họa cách sử dụng phương thức: Application.RemoveAll(); - RemoveAt Method: Là phương thức xóa một đối tượng chỉ định trong tập trạng thái ứng dụng. Cú pháp của phương thức là: 53
  20. Public Sub RemoveAt(ByVal index As Integer) Đoạn code sau minh họa cách sử dụng phương thức: Application.RemoveAt(0); c) Phương thức “Lock” và “UnLock” Phương thức Lock(): Khi nhiều người dùng cùng truy cập vào một ứng dụng ASP.NET, ứng dụng không thể cho phép họ đồng thời truy cập thay đổi cùng một dữ liệu. Để làm được điều này, ta cần khóa các biến dữ liệu. Phương thức Lock(), thuộc lớp HttpApplicationState, ngăn cản người dùng khác thay đổi các biến lưu trữ trong đối tượng Application. Cú pháp của phương thức Lock(): Public Sub Lock() Phương thức UnLock(): Phương thức UnLock(), thuộc lớp HttpApplicationState, được sử dụng để mở khóa cho các biến lưu trữ trong đối tượng Application. Các biến khi đã được mở khóa thì các người dùng khác có thể thay đổi chúng. Phương thức Lock() được mở tương ứng bởi phương thức UnLock(). Trong trường hợp không gọi phương thức UnLock(), .NET Framework tự động xóa Lock() khi Request được hoàn thành, hoặc Request đến thời gian TimeOut, hoặc khi xuất hiện ngoại lệ (Request fail). Cú pháp của phương thức UnLock(): Public Sub UnLock() Ví dụ: Sử dụng các phương thức trên. Application.Lock() Application("VisitorsCount")= Application("VisitorsCount")+1 Application.UnLock() 2.2.5. Đối tượng Session Khi có nhu cầu truyền giá trị từ trang này sang trang khác trong một phiên làm việc, ta sử dụng đối tượng Session. Bằng các sử dụng phương thức và thuộc tính của đối tượng này. Ta có thể khởi tạo, gán giá trị, truy cập và huỷ đối tượng này trong một phiên làm việc nhằm quản lý người sử dụng khi họ truy cập vào Web Site. Web Server sẽ tự động tạo ra đối tượng Session khi chúng chưa tạo ra, đối tượng này sẽ có chu trình sống cho đến khi một trong các điều kiện sau xảy ra: - Người sử dụng đóng trình duyệt, tức là đóng cửa sổ cuối cùng của cùng một trình duyệt. - Khi thời gian sống (expiry) của chúng hết hạn. - Chúng ta khai báo huỷ bỏ đối tượng Session bằng các phương thức của chúng. Ðối tượng Session được cài đặt trong lớp HttpSessionState thuộc không gian tên System.Web.SessionState. a) Session Variables (Các biến Session) Các biến Session được được sử dụng để lưu trữ thông tin về phiên làm việc của một người dùng. Các thông tin này có thể sử dụng cho tất cả các trang trong ứng dụng. Thông thường, thông tin được lưu trữ trong các biến Session là UserName, Password, Các biến Session được xóa ngay khi phiên làm việc với Website của người dùng kết thúc. Session Variables được lưu trữ trong lớp SessionStateItemCollection thuộc không gian miền System.Web.SessionState. Các biến này được thể hiện thông qua thuộc tính System.Web.HttpContext.Session. 54
  21. - Thuộc tính SessionID: Sessions được nhận dạng bởi Session Identifiers, với giá trị duy nhất. Session Identifiers được đọc thông qua thuộc tính SessionID. Khi trạng thái của Session được Enable, mỗi request một trang trong ứng dụng đều được kiểm tra giá trị SessionID. Nếu giá trị SessionID không được cung cấp thì một Session mới được khởi tạo. Sau đó SessionID được gửi cho Session tới Browse cùng với Response. Theo mặc định, giá trị của SessionID được lưu trữ trên một Cookie. Đoạn code sau minh họa sử dụng thuộc tính SessionID Response.Write(“SessionID:“+Session.SessionID) - Phương thức Clear: Là phương thức xóa tất cả đối tượng trong tập Session State. Cú pháp của phương thức Clear là: Public Sub Clear() Đoạn code sau minh họa cách sử dụng phương thức: Session.Clear() - Phương thức Remove: Là phương thức xóa một đối tượng chỉ định trong tập Session State. Cú pháp của phương thức là: Public Sub Remove(ByVal name As String) Đoạn code sau minh họa cách sử dụng phương thức: Session.Remove(“UserName”); - RemoveAll: Là phương thức xóa tất cả đối tượng trong tập Session State. Cú pháp của phương thức là: Public Sub RemoveAll() Đoạn code sau minh họa cách sử dụng phương thức: Session.RemoveAll(); - RemoveAt: Là phương thức xóa một đối tượng chỉ định trong tập Session State. Cú pháp của phương thức là: Public Sub RemoveAt(ByVal index As Integer) Đoạn code sau minh họa cách sử dụng phương thức: Session.RemoveAt(0); c) Session State Events ASP.NET 2.0 cung cấp 2 sự kiện cho phép quản trị Session đó là: - Session_OnStart Event - Session_OnEnd Event d) File “Global.asax” Global.asax file được xem như là file ứng dụng ASP.NET. File này chứa code cho việc trả lời ứng dụng hoặc các modul sự kiện trong một vị trí trung tâm. File Global.asax là file lựa chọn, nó được tạo chỉ khi nếu cần điều điều các sự kiện của ứng dụng hoặc Session. 2.2.6. Cookies a) Tạo và đọc Session Cookies Một Session được định nghĩa là một khoảng thời gian bắt đầu và kết thúc tương tác của người dùng với ứng dụng. Các thông tin của Session như Login, Logout và các trang được viếng thăm được lưu trữ trên file temporary, được gọi là Session Cookies. Một Cookie là một file temporary (tạm) hoặc file permanent (thường xuyên) được sử dụng bởi ứng dụng Web để lưu trữ thông tin người sử dụng. Các Session Cookies có một khoảng thời gian giới hạn, quá thời hạn đó người dùng phải Login lại. Một Session Cookie có thể xem như là một cookie tạm thời. Session Cookies được lư trữ tạm trên bộ nhớ. Khi trình duyệt bị đóng, các session cookies này 55
  22. không được giữ lại. Do đó, lần tiếp theo, người dùng này viếng thăm cùng một site thì anh ta được đối sử giống như một người khách mới. Thay vì tập hợp các thông tin từ máy tính của người sử dụng, session cookies thường được sử dụng cho các ứng dụng Web mà trong đó các người dùng cần được nhận dạng để họ có thể di chuyển từ trang này sang trang khác. Ví dụ sau minh họa cách tạo và đọc Session Cookie: protected void btnAdd_Click(object sender, EventArgs e) { Response.Cookies["Login"]["User"] = txtUser.Text; } protected void btnView_Click(object sender, EventArgs e) {if (Request.Cookies["Login"] == null) {Response.Write("Không Cookies");} else {Response.Write("Thông tin Cookies:" + Request.Cookies["Login"]["User"]); }} b) “Persistent” Cookies Xét các trang Login của các dịnh vụ e-mail phổ biến như Hotmail và Yahoo mail. Khi bạn Login vào mail thì bạn được nhắc có lưu thông tin login trên máy tính không, nếu bạn chọn Yes thì các thông tin này được lưu trữ trên Cookie. Lần Login tiếp theo thì các thông tin này sẽ được tự động xuất hiện tương ứng đúng vị trí. Các Cookies lưu trữ thông tin mà được ghi nhớ thông qua nhiều phiên giao dịch được gọi là Persistent Cookies (Cookie bền). Persistent Cookies được xem như là các cookies thường xuyên hay các cookies lưu trữ. Các Persistent Cookies có thời gian sống (Expiry date) và được lưu trữ trên đĩa cứng của người sử dụng cho đến khi hết thời gian sống hoặc cho đến khi được xóa thủ công. Ví dụ sau minh họa cách tạo Persitent Cookie: HttpCookie userInfoCookie=new HttpCookie("UserInfo"); userInfoCookie.Values["UserName"]="Huongct"; userInfoCookie.Values["LastVisit"] = DateTime.Now.ToString(); userInfoCookie.Expires = DateTime.Now.AddDays(15); Response.Cookies.Add(userInfoCookie); // Đọc Cookies if (Request.Cookies["UserInfo"] == null) {Response.Write("Không Persitent Cookies ");} else {Response.Write("Persitent Cookies :" + Request.Cookies["UserInfo"]["UserName"]); } 2.3. Biến và các cấu trúc điều khiển: .NET Framework cung cấp nhiều ngôn ngữ lập trình khác nhau, mỗi một ngôn ngữ có cách khai báo biến và cấu trúc điều khiển khác nhau. Trong giáo trình này ta sử dụng Visual Basic.NET để minh họa. 2.3.1. Khai báo biến Ta thực hiện khai báo biến theo cú pháp sau: Dim AS 56
  23. Trong trang ASP.NET, theo mặc định biến phải được khai báo trước khi được sử dụng. Ta có thể không khai báo biến mà vẫn sử dụng chúng trong trang ASP.NET bằng cách gán giá trị false (mặc định là true) cho Page Explicit theo cú pháp sau: Các kiểu biến được cho trong bảng sau: CLR (Common Language Visual Basic Type C# Type Runtime) Type Boolean Boolean bool Byte Byte byte Char Char char DateTime Date DateTime Decimal Decimal decimal Double Double double Int32 Integer int Int64 Long long Object Object Object SByte SByte sbyte Int16 Short short Single Single float String String string UInt32 UInteger uint UInt64 ULong ulong UInt16 UShort ushort Để chuyển đổi kiểu dữ liệu ta sử dụng: - Hàm Ctype theo có pháp sau: CType(expression, typename) Trong đó expression là biểu thức cần chuyển đổi sang kiểu typename. - Sử dụng phương thức Parse của hầu hết các kiểu dữ liệu: Dim Age As Integer Age = Integer.Parse(AgeTextBox.Text) - Trong trường hợp chuyển đổi sang kiểu chuỗi ta sử dụng theo phương thức ToString() theo cú pháp sau: Dim instance As AppDomain Dim returnValue As String returnValue = instance.ToString 2.3.2. Các cấu trúc điều khiển a) Cấu trúc rẽ nhánh If Then Ta sử dụng cấu trúc If Then theo một trong các cú pháp sau: - If condition Then [statement] -If condition Then [statements] End If -If condition Then [statements] 57
  24. [ElseIf elseifcondition Then [elseIfStatements]] [Else [elseStatements]] End If Trong đó: + condition: Là biểu thức điều kiện, trả về giá trị True hoặc False. + statement: Là một câu lệnh được thực hiện khi biểu thức điều kiện condition nhận giá trị True. + statements: Là một câu lệnh, hoặc nhiều câu lệnh được thực hiện khi biểu thức điều kiện condition nhận giá trị True. + elseifcondition: Tương tự như condition. + elseifstatements: Là một câu lệnh được thực hiện khi biểu thức điều kiện elseifcondition nhận giá trị True. + elsestatements: Là các câu lệnh được thực hiện khi tất cả các biểu thức điều kiện là false. Chú ý: Ta có thể sử dụng khối các câu lệnh if lồng nhau. Ví dụ. Sử dụng cấu trúc rẽ nhánh If Then Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Dim x, y, a As Integer x = 25 y = 5 If x b) Cấu trúc rẽ nhánh Select Case Select [ Case ] testexpression [ Case expressionlist [ statements ] ] [ Case Else [ elsestatements ] ] End Select Trong đó: + testexpression: Là biểu thức giá trị có thể liệt kê được, giá trị thuộc một trong các loại dữ liệu sau: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, Short, Single, String. + expressionlist: Là danh sách các giá trị mà testexpression có thể nhận, có thể là hằng hoặc biểu thức, chúng cách nhau dấu. Biểu thức trong Case có nhận một trong các dạng sau: expression1 To expression2 [ Is ] comparisonoperator expression expression Từ khóa To để chỉ một khoảng giá trị, Is dùng để so sánh. Ví dụ như: Case 1 To 4,5,6,7 To 9,11,13, Is > MaxNumber 58
  25. + statements: Một hay nhiều câu lệnh trong Case. + elsestatements: Một hay nhiều câu lệnh trong Case Else. c) Cấu trúc lặp Do Loop Lặp lại một khối câu lệnh trong khi biểu thức điều kiện là True hoặc cho đến khi điều kiện đạt giá trị True. Ta sử dụng cú pháp sau: Do { While | Until } condition [ statements ] [ Exit Do ] [ statements ] Loop hoặc Do [ statements ] [ Exit Do ] [ statements ] Loop { While | Until } condition Trong đó: + While : được khai báo trừ khi Until được sử dụng. Lặp cho đến khi condition là False. + Until: được khai báo trừ khi While được sử dụng. Lặp cho đến khi condition là True. + condition : Là biểu thức Boolean. + statements : Là một câu lệnh hoặc khối câu lệnh lặp lại. + Exit Do: Là câu lệnh thoát khỏi vòng lặp Do loop. d) Cấu trúc While End While Cấu trúc này lặp một khối câu lệnh trong khi điều kiện là True, theo cú pháp sau. While condition [ statements ] [ Exit While ] [ Statements ] End While Trong đó: + condition : Là biểu thức Boolean. + statements : Là một câu lệnh hoặc khối câu lệnh lặp lại. + Exit While: Dùng để thoát khỏi vòng lặp. Ví dụ : Sử dụng cấu trúc While End While Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Dim counter As Integer = 0 While counter ") End While End Sub e) Cấu trúc With End With Cấu trúc With End With được dùng thực hiện với một chuỗi câu lệnh cùng tham chiếu đến một đối tượng hoặc cấu trúc. Sử dụng theo cú pháp sau: 59
  26. With object [ statements ] End With Ví dụ: Sử dụng cấu trúc With End With Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) With Me.lblLabel .Text = "Cấu trúc With End With" .ForeColor = Drawing.Color.Blue .BorderColor = Drawing.Color.Violet .BackColor = Drawing.Color.BlueViolet End With End Sub Untitled Page f) Cấu trúc lặp For Each Next Cấu trúc lặp For Each Next dùng để lặp các câu lệnh đối với mỗi phần tử element trong một tập hợp group. Chúng được sử dụng theo cú pháp sau: For Each element [ As datatype ] In group [ statements ] [ Exit For ] [ statements ] Next [ element ] Trong đó: + element : là biến dùng để duyệt các phần tử trong một tập hợp. + datatype : Kiểu của element và phải được khai báo nếu chưa khai báo trước đó, kiểu của nó cùng kiểu với các phần tử của tập hợp. + group : Chỉ một tập hợp các phần tử mà các câu lệnh lặp trên đó. + statements : Một hoặc nhiều câu lệnh. + Exit For : Dùng để thoát khỏi vòng lặp For Each g) Cấu trúc lặp For Next Đây là cấu trúc lặp chỉ định được số lần lặp, được sử dụng theo cú pháp sau đây: For counter [ As datatype ] = start To end [ Step step ] [ statements ] 60
  27. [ Exit For ] [ statements ] Next [ counter ] Trong đó: + counter: Đây là biến đếm điều khiển quá trình lặp. + datatype: Kiểu của biến counter. + start :Giá trị khởi tạo cho biến count + end: Giá trị kết thúc của biến counter. + step: Bước nhảy của biến, mặc định là 1 + statements: Các câu lệnh thực hiện trong vòng lặp. + Exit For: Dùng để thoát khỏi vòng lặp 2.3.3. Các toán tử a) Các phép toán số học Ngoài các phép toán số học cơ bản như: + (cộng) : variable=expression1 + expression2 - (trừ) : variable=expression1 - expression2 * (nhân) : variable=expression1*expression2 / (chia) : variable=expression1 / expression2 ^ (lũy thừa) : variable=expression1 ^ expression2 \ (chia lấy module) : variable=expression1 \ expression2 Mod (chia lấy phần dư): variable=expression1 Mod expression2 Visual Basic.Net còn cung cấp một số phép toán đặc biệt sau: += (cộng bằng) : variable+=expression tương đương với biểu thức variable= variable + expression -= (trừ bằng) : variable -=expression tương đương với biểu thức variable= variable - expression *= (nhân bằng) : variable *=expression tương đương với biểu thức variable= variable * expression / =(chia bằng) : variable *=expression tương đương với biểu thức variable= variable/expression ^=(lũy thừa bằng) : variable ^=expression tương đương với biểu thức variable= variable ^ expression \ =(chia lấy phần nguyên bằng) : variable \=expression tương đương với biểu thức variable= variable \ expression b) Các phép toán so sánh Các phép toán so sánh trả về giá trị kiểu Boolean. - Các phép toán so sánh số học: =, , >=, , >, >=, Is c) Các phép toán logic Là các phép toán giữa các biểu thức boolean: Not, And, Or, Xor d) Phép toán ghép chuỗi Là các phép dùng để ghép hai chuỗi ký tự với nhau: &, + 61
  28. 2.4. Thủ tục và hàm 2.4.1. Thủ tục Sub Thủ tục Sub là một chuỗi các câu lệnh Visual Basic được bao trong các câu lệnh Sub và End Sub. Thủ tục Sub thực hiện một tác vụ nào đó và sau đó trả về điều khiển cho code chứ không trả về giá trị cho code đang gọi nó. - Khai báo thủ tục sub: [modifiers] Sub subname[(parameterlist)] ' Statements of the Sub procedure. End Sub Trong đó: modifiers chỉ định pham vi truy cập (public, private, protected, friend) của thủ tục, mặc định là public. Mỗi lần thủ tục được gọi, các câu lệnh trong thủ tục được gọi bắt đầu từ câu lệnh đầu tiên sau Sub và kết thúc khi gặp các từ khóa End Sub, Exit Sub, hoặc câu lệnh Return. Ta có thể định nghĩa thủ tục Sub các module, modules, classes, và structures. - Tham số trong sub: Thực hiện khai báo các tham số tương tự như khai báo biến, chỉ định tên tham số và kiểu dữ liệu của tham số đó. Ngoài ra ta có thể chỉ định kiểu truyền cho tham số này theo cú pháp sau: [Optional] [ByVal | ByRef]parametername As datatype + Với chỉ định tùy chọn Optional ta phải cung cấp giá trị mặc định theo cú pháp sau: Optional [ByVal | ByRef] parametername As datatype = defaultvalue + Với tùy chọn ByVal ta khai báo tham số đó là tham trị (mặc định là tham trị): Khi truyền giá trị cho tham số là tham trị thì giá trị của nó sẽ không thay đổi khi ra khỏi hàm hay thủ tục. + Với tùy chọn ByRef ta khai báo tham số đó là tham biến: Khi truyền giá trị cho tham số là tham biến thì giá trị của nó sẽ thay đổi nếu có cập nhật khi ra khỏi hàm hay thủ tục. - Gọi thủ tục sub: Để gọi thủ tục ta sử dụng cú pháp sau: [Call] subname[(argumentlist)] 2.4.2. Hàm - Function Function là một chuỗi các câu lệnh Visual Basic được bao trong các câu lệnh Function và End Function. Function thực hiện một tác vụ nào đó và sau đó trả về điều khiển cho code đồng thời trả về giá trị cho code đang gọi nó. - Khai báo hàm: [modifiers] Function functionname[(parameterlist)] As returntype ' Statements of the Function procedure. End Function Các tham số trong hàm tương tự như thủ tục. Mỗi khi được gọi, hàm sẽ thực hiện tuần tự các câu lệnh cho đến khi gặp một trong các câu lệnh End Function, Exit Function,hoặc Return. -Trả về các giá trị của hàm: Giá trị của hàm sẽ trả về cho chương trình gọi chúng theo một trong hai cách sau: + Gán giá trị cho tên hàm trong một hoặc nhiều câu lệnh trong thân hàm, trong trường hợp này điều khiển không được trả về cho trương trình gọi hàm cho đến khi gặp câu lệnh End Function hoặc Exit Function. Function functionname[(parameterlist)] As returntype ' The following statement does not transfer control back ' to the calling code. 62
  29. functionname = expression ' When control returns to the calling code, expression ' is the return value. End Function + Sử dụng câu lệnh Return để chỉ định giá trị trả về cho hàm và điều khiển được trả về cho chương trình gọi ngay lập tức. Function functionname[(parameterlist)] As returntype ' The following statement immediately transfers control ' back to the calling code and returns the value of ' expression. Return expression End Function - Gọi hàm:Hàm có thể được gán giá trị cho biến hoặc sử dụng như một toán hạng trong biểu thức như sau: value = functionname[(argumentlist)] If ((functionname[(argumentlist)] / 3) <= expression) Then 3. Các đối tượng ADO.Net: Mục tiêu: Sử dụng tốt các đối tượng ADO.Net, có khả năng lập trình kết nối cơ sở dữ liệu. 3.1. Các đối tượng trong ADO.Net ADO.Net là đối tượng dùng để thao tác với cơ sở dữ liệu trong .NetFramework, các ngôn ngữ lập trình trong Visual Studio (VB.Net, C#, ) dùng phương thức kết nối này để giao tiếp với cơ sở dữ liệu. Lõi của các lớp ADO.NET tồn tại trong namespace System.Data. Phần quan trọng nhất của chúng là các tên miền System.Data.SqlClient và System.Data.OleDb. Chúng cung cấp các classes sử dụng cho việc truy cập SQL Server databases và OLE (Object Linking and Embedding) DB-compliant databases (phục hồi dữ liệu). Có thể chia làm 2 phần chính: - Mannaged Provider Component: bao gồm các đối tượng như: DataAdapter, DataReader, Connection, Command giữ nhiệm vụ làm việc trực tiếp với dữ liệu như datatbase, file, - Content Component: bao gồm các đối tượng như DataSet, DataTable, DataView, DataRow, DataColumn, DataRelation đại diện cho dữ liệu thực sự cần làm việc. Bảng ADO.Net Data Objects giới thiệu sơ lược các đối tượng dùng để thao tác dữ liệu: Object Ý nghĩa Sử dụng cùng với các điều khiển dữ liệu khác, dùng lưu trữ các kết quả được trả về bởi các đối tượng commands và data adapters. Data set là một view phân cấp của dữ liệu, bằng việc sử dụng các DataSet thuộc tính và các collections trong đối tượng DataSet, ta có thể nhận được toàn bộ các quan hệ (relations), các tables riêng biệt, rows, và columns. Là một đối tượng của dataset, đối tượng DataTable cho phép thao DataTable tác dữ liệu trong một table riêng biệt. Được dung tương tự như đối tượng recordset trong ADO. 63
  30. Sử dụng đối tượng này để lọc, sắp xếp dữ liệu, duy trì các views DataView khác nhau của dữ liệu. Đối tượng thao tác các rows của dữ liệu trong datatables. Dùng thực DataRow hiện các thao tác adding, deleting, và modifying records. Nhận các thông tin tại các cột bằng việc sử dụng đối tượng DataColumn DataColumn. DataRelation Chứa các mối ràng buộc trong cơ sở dữ liệu Bảng NET Data Provider Classes thường được sử dụng để thao tác dữ liệu: Tương tự như đối tượng ADO Command, cho phép ta thực hiện Command các stored procedures trong code. Đây là đối tượng mở kết nối tới server và database mà ta muốn làm việc. Khác với đối tượng ADO Connection, cách thức kết nối Connection phụ thuộc vào đối tượng mà ta muốn làm việc, như là đối tượng DataReader hay DataSet. Đối tượng DataAdapter cho phép ta tạo các câu lệnh SQL và DataAdapter điền dữ liệu vào datasets. Nó cũng cho phép tạo các action queries cần thiết, như là Insert, Update, và Delete. Đối tượng này tạo một read-only, forward-onlystream của dữ DataReader liệu mà cho phép chúng đặt trên các điều khiển, như ListBox và ComboBox. Đây là đối tượng cho phép chỉ định các tham số mà các đối Parameter tượng DataAdapter có thể chỉ định và sử dụng. Ngoài ra, hai tên miền con khác cũng tồn tại trong tên miền System.Data, đó là: System.Data.OracleClient và System.Data.Odbc. Như vậy, các tên miền System.Data.SqlClient, System.Data.OleDb, System.Data.OracleClient, và System.Data.Odbc được biết như là data providers trong ADO.NET, chúng có cách thức làm việc tương tự nhau. Trong phần này trọng tâm tìm hiểu lớp System.Data.SqlClient để làm việc với Database xây dựng trên SQL Server. 3.2. Các lớp SqlClient trong mô hình ADO.Net Danh sách sau chứa các classes ADO.NET mà chúng sẽ được sử dụng trong quá trình xây dựng ứng dụng sử dụng SQL Server Databases: SqlConnection, SqlDataAdapter, SqlCommand, SqlParameter, SqlDataReader. Để sử dụng provider này cần phải viết lệnh Imports (khai báo Namespace) trên đầu mỗi class: Nếu ta muốn sử dụng lõi của classes ADO.NET, như là DataSet và DataView không cần gõ đầy đủ tên miền, cần phải Import tên miền System.Data như sau: Sau đây là các classes chính tồn tại trong namespace System.Data.SqlClient. 64
  31. 3.2.1. Class SQLConnection Class SqlConnection cung cấp một connection tới SQL Server database. Khi xây dựng một đối tượng SqlConnection có thể chọn để chỉ định một chuỗi kết nối (connection strings) như một tham số. Chuỗi connection chứa tất cả các thông tin cần thiết để mở một connection tới database. Nếu ta không chỉ định chuỗi kết nối trong khi xây dựng, có thể thiết lập nó bằng việc sử dụng thuộc tính SqlConnection.ConnectionString. Khai báo chuỗi kết nối trong VB.net: Dim strconn As String="server=AA;database=QLDiemSV; user id=sa;password=pass2008") Dim objConnection As New SqlConnection(strconn) Các tham số của chuỗi kết nối (Connection String Parameters) Bảng Tham số của chuỗi kết nối. Tham số Môtả Tên của SQL Server mà ta muốn truy xuất. Nó thường là tên của máy tính đang chạy SQL Server. Ta có thể sử dụng (local) hoặc localhost nếu SQL Server trên cùng một máy đang Server chạy ứng dụng. Nếu bạn sử dụng các thể hiện tên của SQL Server, thì tham số nên chứa tên của máy tính theo sau là đấu gạch chéo ngược và tiếp đó là thể hiện tên của SQL Server. Database Là tên của database mà ta muốn connect tới. Username sử dụng để connect tới database. account với user ID User ID này phải tồn tại trong SQL Server và được phép truy cập đến database chỉ định. Password Là password của user đã chỉ định. Chuỗi kết nối này sẽ connects tới SQL Server database. Tham số Server chỉ định là database nằm trên máy AA. Tham số Database chỉ định database mà ta muốn truy cập, trong trường hợp này là database QLDiemSV. Cuối cùng, các tham số User ID và Password chỉ định User ID và password của user định nghĩa trên database. Ta thấy rằng, mỗi một tham số được gán một giá trị qua dấu =, và mỗi cặp parameter - value được phân cách nhau nhau bởi dấu chấm ;. Dim objConnection As SqlConnection = New _ SqlConnection(“Server=localhost;Database=pubs;” & _ “User ID=sa;Password=vbdotnet;”) Ta nên khai báo chuỗi kết nối trong tệp web.config như sau: - Sử dụng Sau đó sử dụng hàm ConfigurationManager.AppSettings("Conn") để lấy chuỗi kết nối đó: Dim strConn As String 'Lấy chuỗi kết nối CSDL strConn = ConfigurationManager.AppSettings("Conn") Dim myConn As New SqlConnection(strConn) 65
  32. - Sử dụng Sau đó sử dụng hàm ConfigurationManager.ConnectionStrings ("MyConn").ToString để lấy chuỗi kết nối đó: Dim strConn As String 'Lấy chuỗi kết nối CSDL strConn=ConfigurationManager.ConnectionStrings("MyConn").ToString Dim myConn As New SqlConnection(strConn) Một số phương thức thường dùng của Connection objConnection.Open(): mở kết nối đến cơ sở dữ liệu cùng với các thông tin đã được khai báo trong ConnectionString . objConnection.Close(): Đóng kết nối với nguồn dữ liệu. Sử dụng phương thức này để đóng Connection đang mở. objConnection.Dispose(): Xóa mọi tài nguyên liên quan đến Connection trên vùng nhớ. 3.2.2. Class SQLCommand Lớp SqlCommand đại diện cho các câu lệnh SQL để thực hiện truy vấn dữ liệu lưu trữ. Các câu lệnh là truy vấn select, insert, update, hoặc delete,.v.v Có thể là các chuỗi SQL hoặc gọi một stored procedure. Truy vấn được thực hiện có thể chứa các tham số hoặc không chứa các tham số. Bảng Các thành phần của SqlCommand Thành phần Ý nghĩa Lấy ra hoặc thiết lập thời gian chờ trong khi đang thực thi lệnh CommandTimeout trước khi kết thúc. Lấy ra hoặc thiết lập SqlConnection được dùng bởi thể hiện Connection này của SqlCommand. Cancel() Hủy bỏ việc thực thi của một lệnh. Thực hiện câu lệnh trong CommandText. Kết quả trả về là ExecuteReader() DataReader của trình cung cấp dữ liệu. Thực hiện câu lệnh trong CommandText và không có kết quả ExecuteNonQuery() trả về. Thực hiện câu lệnh trong CommandText, kết quả trả về là một ExecuteScalar() giá trị đơn. Phương thức này trả về một System.Xml.XmlReader mà cho ExecuteXmlReader() phép xử lý luồng đầu vào của XML Lấy ra tập hợp các kiểu của SqlParameter được dùng cho một Parameters truy vấn có tham số. Tạo một phiên bản được chuẩn bị (hoặc được biên dịch) của Prepare() lệnh trên nguồn dữ liệu. Khai báo: Dim objCommand As SqlCommand = New SqlCommand() Hoặc: 66
  33. Dim objCommand As SqlCommand = New SqlCommand(strSQL, objConnection) Trong trường hợp này, chuỗi truy vấn strSQL và objConnection phải được khai báo hoặc đã được gọi ở thủ tục nào trước đó. Một số thuộc tính thường gặp: Thuộc tính Ý nghĩa Cú pháp Connection Thuộc tính này thiết lập tới đối objCommand.Connection = tượng SqlConnection objConnection CommandText Chỉ định chuỗi Sql hoặc stored objCommand.CommandText procedure sẽ được thực hiện = “giá trị chuỗi” CommandType Giá trị chỉ định nội dung cmd.CommandType CommandText phải dùng là gì: =CommandType.Giatri - - Text: (mặc định) lệnh Sql. - - TableDirect: Tên của một hoặc nhiều bảng. - - Storedprocedure: tên thủ tục nội tại trong cơ sở dữ liệu. Ví dụ: ‘ Khai báo biến Dim objConnection As New SqlConnection _ ("server=AA;database=QLDiemSV;user id=sa;password=pass2008") Dim objCommand As SqlCommand = New SqlCommand() ‘Mở kết nối objConnection.Open() objCommand.Connection = objConnection objCommand.CommandText = "INSERT INTO HOSOSV " & _"(MaSV, HoDem, TenSV, NgaySinh, MaLop) " &_ "VALUES(@MaSV,@Hodem,@TenSV,@NgaySinh,@MaLop)" ' Add parameters for the placeholders in the SQL in the objCommand.Parameters.AddWithValue("@MaSV", txtMaSV.Text) objCommand.Parameters.AddWithValue("@Hodem", txtHodem.Text) objCommand.Parameters.AddWithValue("@TenSV", txtTenSV.Text) objCommand.Parameters.AddWithValue("@NgaySinh",_ txtNgaySinh.Text).DbType = DbType.Date objCommand.Parameters.AddWithValue("@MaLop", cboMaLop.Text) - Phương thức AddWithValue thừa nhận tên của tham số và giá trị ta muốn truyền cho tham số. Trong trường hợp này, ta sử dụng thuộc tính Text của đối tượng Text box trên cùng một Form. - Phương thức Add được sử dụng để khai báo tham số và truyền giá trị cho tham số sử dụng thuộc tính Value của tham số đó. objCommand.Parameters.Add("@Address", Data.SqlDbType.NVarChar, 255) objCommand.Parameters("@Address").Value = txtAddress.Text Sau đây là một số phương thức thực hiện các câu lệnh khi connection đã được mở. * Phương thức ExecuteNonQuery Phương thức này thực hiện câu lệnh SQL chèn dữ liệu vào database. Để hoàn thành đoạn code, ta phải mở connection, thực hiện query, và đóng connection trở lại: Ví dụ: 67
  34. Dim objConnection As New SqlConnection _ ("server=AA;database=QLDiemSV;user id=sa;password=pass2008") Dim objCommand As SqlCommand = New SqlCommand() objCommand.Connection = objConnection objCommand.CommandText = "INSERT INTO HOSOSV (MaSV, HoDem) VALUES(@MaSV,@Hodem,@TenSV,@NgaySinh,@MaLop)" objCommand.Parameters.AddWithValue("@MaSV", txtMaSV.Text) objCommand.Parameters.AddWithValue("@Hodem", txtHodem.Text) objConnection.Open() ' Thực hiện chèn dữ liệu Try objCommand.ExecuteNonQuery() Catch SqlExceptionErr As SqlException MessageBox.Show(SqlExceptionErr.Message) End Try objConnection.Close() * Phương thức ExecuteReader Phương thức ExecuteReader của đối tượng SqlCommand sẽ thực hiện truy vấn trả về kết quả trên đối tượng DataReader. Và dữ liệu trên DataReader thường được đổ sang các điều khiển ListBox, ComboBox trên form ứng dụng. Ví dụ: ' Khai báo các biến Dim objCommand As SqlCommand = New SqlCommand() Dim objDataReader As SqlDataReader objConnection.Open() objCommand.Connection = objConnection objCommand.CommandText = "Select MaLop, TenLop From Lop" ' Execute the SqlCommand object to insert the new data objDataReader = objCommand.ExecuteReader cboMaLop.Items.Clear() Do While (objDataReader.Read()) cboMaLop.Items.Add(objDataReader.Item(0)) Loop objConnection.Close() * Phương thức ExecuteScalar Là phương thức trả về một giá trị vô hướng. cmd.CommandText = " Select OrderID From Orders " & _ "Where(MemberName=@MemberName) and (OrderDate=@OrderDate) and (CustomerName=@CustomerName)and (Address=@Address) and (County=@County) and (PostCode=@PostCode) and (Country=@Country) and (SubTotal=@SubTotal) and (Discount=@Discount) and ( Total=@Total)" Dim OrderID As Integer OrderID = Convert.ToInt32(cmd.ExecuteScalar()) 3.2.3. Class SQLDataAdapter DataAdapter sử dụng các đối tượng command và connection để truy xuất và điều khiển data source. 68
  35. Khai báo: Dim objDataAdapter As New SqlDataAdapter() Khởi tạo: objDataAdapter = New SqlDataAdapter( , ) Trong đó: - : câu lệnh truy vấn hoặc tên storedprocedure để thực hiện truy xuất từ nguồn dữ liệu. - : đối tượng Connection đã kết nối với cơ sở dữ liệu. Các thuộc tính: Thuộc tính Ý nghĩa SelectCommand Chứa nội dung lệnh truy xuất các mẫu tin từ nguồn dữ liệu DelectCommand Chứa nội dung lệnh hủy các mẫu tin từ nguồn dữ liệu InsertCommand Chứa nội dung lệnh chèn các mẫu tin mới vào nguồn dữ liệu UpdateCommand Chứa nội dung lệnh cập nhật các mẫu tin từ nguồn dữ liệu Phương thức Fill Ta dùng phương thức Fill để đưa dữ liệu vào đối tượng DataSet. Cần phải khởi tạo đối tượng DataSet trước khi sử dụng nó. Để sử dụng đối tượng DataSet trong project của ta, ta phải add một tham chiếu tới System.Xml. - Fill ( ): Đổ dữ liệu vào DataTable có sẵn. - Fill ( ): Đổ dữ liệu vào DataSet có sẵn. Dữ liệu được lấy về DataSet dưới dạng DataTable. Với tên mặc định là table1, table2, - Fill ( , ): Đổ dữ liệu vào DataSet cho bảng , nếu chưa có bảng này, bảng sẽ được tạo ra (cách này thường được sử dụng). Đối số DataSet chỉ định một đối tượng DataSet hợp lệ mà dữ liệu được lưu trữ ở trong đó. Chú ý rằng, một DataSet có thể chứa nhiều bảng, thường tốt nhất là sử dụng tên của các bảng nơi mà dữ liệu trong database đến. Nó giúp cho văn bản code của ta và làm cho code dễ bảo trì. Ví dụ: Đoạn code sau gọi phương thức Fill. Chuỗi “authors” được chỉ định là đối số string. Nó là tên ta muốn sử dụng khi đang thao tác trong các phiên bản nhớ của bảng này; nó cũng là tên của bảng trong data source. ‘ Declare a SqlDataAdapter object Dim objDataAdapter As New SqlDataAdapter() ‘Create an instance of a new select command object objDataAdapter.SelectCommand = New SqlCommand() ‘ Set the SelectCommand properties objDataAdapter.SelectCommand.Connection = objConnection objDataAdapter.SelectCommand.CommandText = “usp_select_DSSV” objDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure Dim objDataSet as DataSet = New DataSet() ‘ Fill the DataSet object with data objDataAdapter.Fill(objDataSet, “DSSV”) Phương thức Fill sử dụng thuộc tính SelectCommand.Connection để connect tới database. Nếu connection đã được mở, data adapter sẽ sử dụng nó để thực hiện SelectCommand. Và nếu như connection đã đóng thì data adapter sẽ mở nó, thực 69
  36. hiện SelectCommand, và sau đó đóng trở lại. Bây giờ ta đã có dữ liệu trong bộ nhớ, và có thể bắt đầu thao tác mà không phụ thuộc vào data source. 3.2.4. Class DataSet - Là lớp dùng để thao tác với dữ liệu, được xem như một kho chứa các table. Dữ liệu có thể cập nhật trong các bảng này và khi muốn cập nhật vào cơ sở dữ liệu thì DataSet sẽ thực hiện việc cập nhật thông qua DataAdapter. Vì vậy nó được xem là mô hình dữ liệu phi kết nối. - Các bảng trong DataSet có thể được tạo thành từ lớp DataTable hoặc do DataAdapter Fill vào. - Một DataSet có thể lưu trữ nhiều bảng. Khai báo: Dim objDataSet = New DataSet() Các phương thức quan trọng của DataSet: Phương thức Ý nghĩa Cú pháp Add Đưa bảng vào DataSet objDataSet.Tables.Add( ) Remove Xóa bảng objDataSet.Tables.Remove( ) Contains Kiểm tra bảng có thuộc về DataSet objDataSet.Tables. Contains ( ) CanRemove True: nếu có thể xóa bảng objDataSet.Tables.CanRemove( ) Clear Xóa tất cả các bảng objDataSet.Tables.Clea() Dispose Xóa DataSet objDataSet. Dispose() Clear Xóa toàn bộ nội dung trong DataSet objDataSet .Clear() DataTable: Khai báo: Dim objDataTable = New DataTable() Là đối tượng chứa dữ liệu trên Dataset. Được tạo lập từ DataRows và DataColumns. - DataColumns: tập hợp các cột có trong DataTable. Khai báo: Dim tencot = New DataColumns( , ) Trong đó: là kiểu dữ liệu của cột, được khai báo thông qua cú pháp System.Type.GetType(“System.Tenkieu”). Đưa cột vào bảng: tenbang.Columns.add(tencot) - DataRows: tập hợp các dòng dữ liệu của bảng. Mọi tham chiếu dòng đều thông qua tập hợp này. Các thuộc tính: Thuộc tính Ý nghĩa Cú pháp Count Số dòng dữ liệu có trong DataTable Rows.Count Item(i) Tham chiếu đến dòng i Rows.Item(i) / Rows(i) /Rows(i) Item(i)(j) Tham chiếu đến dòng i cột j Rows.Item(i)(j) Item(i)(“Tên Tham chiếu đến cột có tên cột trên Rows.Item(i)(“Tên cột”) cột”) dòng i Các phương thức: Phương thức Ý nghĩa Cú pháp Add Thêm dòng vào Table TableName.Rows.Add(<d 70
  37. ong>) RemoveAt Xóa dòng khỏi bảng Rows.RemoveAt( ) Remove Xóa dòng khỏa bảng Rows.Remove(dòng) Clear Xóa toàn bộ dòng dữ liệu của bảng Rows.Clear() 3.2.5. DataView DataView là khung nhìn của DataTable, dùng hiển thị dữ liệu mà người dùng muốn lấy từ Datatable. Khai báo: Dim objDataView = New DataView(objDataSet.Tables(“tên bảng”)) Có thể tạo một View từ bảng bằng lệnh: Dim objDataView As DataView = tenbang.DefaultView Các thuộc tính và phương thức quan trọng của DataView Thuộc tính/ Ý nghĩa Cú pháp Phương thức objDataView.Sort = “Tencot Sort Biểu thức sắp xếp asc/desc, ” Biểu thức lọc của dataview để objDataView.RowFilter = “Tencot = RowFilter thay đổi cách hiển thị dữ liệu giá trị and/or ” Dim vitri as Integer Tìm kiếm, trả về vị trí dòng thỏa objDataView.Sort = “Tencot” Find điều kiện, tìm theo cột nào phải vitri = objDataView.Find(“giá trị”) sắp xếp dữ liệu theo cột đó Ví dụ . Minh họa các đối tượng trong mô hình ADO.NET (vidu3_1.aspx) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim myDataSet As New DataSet() Dim myDataview As DataView Dim strConn, strSQL As String strConn = ConfigurationManager.AppSettings("Conn") Dim myConn As New SqlConnection(strConn) strSQL = "SELECT * From Accounts" ' Khai báo đối tượng SqlDataAdapter Dim myDataAdapter As New SqlDataAdapter() myDataAdapter.SelectCommand = New SqlCommand() myDataAdapter.SelectCommand.Connection = myConn myDataAdapter.SelectCommand.CommandText = strSQL myDataAdapter.SelectCommand.CommandType = CommandType.Text ' Mở kết nối myConn Open() myDataAdapter.Fill(myDataSet, "tblAccounts") myConn.Close() ' Điền dữ liệu từ DataSet vào ASP:DataGrid Control dgrResult.DataSource = myDataSet dgrResult.DataBind() 71
  38. Me.MyGridView.DataSource =myDataSet.Tables("tblAccounts") Me.MyGridView.DataBind() myDataview = New DataView(myDataSet.Tables("tblAccounts")) myDataview.Sort = "UserName" Me.grvMyDataview.DataSource = myDataview Me.grvMyDataview.DataBind() End Sub Thể hiện GidView dùng Dataset.Table Thể hiện Đối tượng DataView Kết quả thực hiện trên trình duyệt cho trong hình 3.4. 72
  39. Hình 3.4. Kết quả thực hiện trang vidu3_1.aspx 3.2.6. Thực hiện các thao tác Update, Delete, Insert Trong phần này ta sẽ thực hiện các thao tác dữ liệu Update, delete, Insert dữ liệu sử dụng các đối tượng ADO.NET. a) Thao tác cập nhật dữ liệu - Update Có nhiều cách để cập nhật dữ liệu, với cách sử dụng các điều khiển lưới là một trong những cách được các nhà lập trình web hay sử dụng. Trong hình sau cho phép người sử dụng cập nhật dữ liệu từ Data grid control bằng cách chọn vào biểu tượng cây viết. Khi click và biểu tượng này thì các điều khiển Textbox tương ứng với các trường xuất hiện như sau:. Hình 3.5. Kết quả thực hiện click Edit trong trang vidu3_2.aspx Để trình bày được dữ liệu như hình trên ta thực hiện khai báo thủ tục BindGrid() truy xuất dữ liệu từ CSDL như sau: Sub BindGrid() Dim myDataView As DataView Dim myDataSet As New DataSet() Dim strConn, strSQL As String strConn = ConfigurationManager.AppSettings("Conn") Dim myConn As New SqlConnection(strConn) strSQL = "SELECT UserName, Password, Address From Accounts" Dim myDataAdapter As New SqlDataAdapter() 73
  40. myDataAdapter.SelectCommand = New SqlCommand() myDataAdapter.SelectCommand.Connection = myConn myDataAdapter.SelectCommand.CommandText = strSQL myDataAdapter.SelectCommand.CommandType = CommandType.Text myConn.Open() myDataAdapter.Fill(myDataSet, "tblAccounts") myConn.Close() myDataView = New DataView(myDataSet.Tables("tblAccounts")) myDataView.Sort = "UserName" Me.ItemsGrid.DataSource = myDataView Me.ItemsGrid.DataBind() End Sub Để kích hoạt dữ liệu trước hết ta khai báo điều khiển DataGrid: " CancelText="Cancel" UpdateText="Update" HeaderText="Edit item"> " CommandName="Delete"/> Và khai báo các thủ tục: - Thủ tục ItemsGrid_Edit trên sự kiện OnEditCommand của điều khiển Datagrid. Thủ tục này thiết lập thuộc tính EditItemIndex đến chỉ số của phần tử được chọn. Sub ItemsGrid_Edit(sender As Object, e As DataGridCommandEventArgs) ItemsGrid.EditItemIndex = e.Item.ItemIndex BindGrid() End Sub 74
  41. - Thủ tục ItemsGrid_Cancel trên sự kiện OnCancelCommand của điều khiển Datagrid. Thủ tục này thiết lập thuộc tính EditItemIndex =-1 để kết thúc trạng thái Edit. Sub ItemsGrid_Cancel(sender As Object, e As DataGridCommandEventArgs) ItemsGrid.EditItemIndex = -1 BindGrid() End Sub - Thủ tục ItemsGrid_Update trên sự kiện OnUpdateCommand của điều khiển Datagrid. Thủ tục này truy xuất vào các điều khiển Textbox để lấy các giá trị cần Update (các điều khiển này nằm ở vị trí thứ nhất trong tập các điều khiển của cell) và sử dụng các đối tượng của ADO.NET để cập nhật dữ liệu về cơ sở dữ liệu. Sub ItemsGrid_Update(sender As Object, e As DataGridCommandEventArgs) Dim PassText As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox) Dim AddText As TextBox = CType(e.Item.Cells(4).Controls(0), TextBox) Dim txt_UserName As String = e.Item.Cells(2).Text Dim txt_Password As String = PassText.Text Dim txt_Address As String = AddText.Text Dim myConn As SqlConnection Dim MyCommand As SqlCommand Dim strConn As String = ConfigurationManager.AppSettings("Conn") Dim strUpdate As String strUpdate = " UPDATE Accounts SET Password =@Password, Address =@Address WHERE UserName=@UserName" myConn = New SqlConnection(strConn) myConn.Open() MyCommand = New SqlCommand(strUpdate, myConn) MyCommand.Parameters.AddWithValue("@UserName", txt_UserName) MyCommand.Parameters.AddWithValue("@Password", txt_Password) MyCommand.Parameters.AddWithValue("@Address", txt_Address) MyCommand.CommandType = CommandType.Text MyCommand.ExecuteNonQuery() myConn.Close() ItemsGrid.EditItemIndex = -1 BindGrid() End Sub b) Thao tác xóa dữ liệu - Delete Trong hình 3.5 người sử dụng xóa dữ liệu trong DataGrid chỉ cần click vào biểu tượng xóa (×). Để có thể xóa trước hết trong DataGrid ta xây dựng thêm thẻ: " CommandName="Delete"/> Và xây dựng thủ tục xóa dùng các đối tượng ADO.NET như sau: Sub DeleteItem(ByVal e As DataGridCommandEventArgs) Dim txt_ProductID As String = e.Item.Cells(3).Text Message.Text = txt_ProductID Dim myConn As SqlConnection Dim MyCommand As SqlCommand 75
  42. Dim strConn As String = ConfigurationManager.AppSettings("Conn") Dim strUpdate As String strUpdate = " DELETE FROM Products WHERE ProductID=@ProductID" myConn = New SqlConnection(strConn) myConn.Open() MyCommand = New SqlCommand(strUpdate, myConn) MyCommand.Parameters.AddWithValue("@ProductID", txt_ProductID) MyCommand.CommandType = CommandType.Text MyCommand.ExecuteNonQuery() myConn.Close() ItemsGrid.EditItemIndex = -1 ' Rebind the data source to refresh the DataGrid control. BindGrid() End Sub Gọi thủ tục trên bằng sự kiện ItemCommand như sau: Sub ItemsGrid_Command(ByVal sender As Object, ByVal e As DataGridCommandEventArgs) Select Case (CType(e.CommandSource, LinkButton)).CommandName Case "Delete" DeleteItem(e) Case Else End Select End Sub c) Thao tác thêm dữ liệu - Insert Để thực hiện thêm dữ liệu vào CSDL ta tiến hành xây dựng thêm các điều khiển: UserName Password Address Với thủ tục btnAdd_Click như sau: Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Me.lblAddress.Visible = True Me.lblPassword.Visible = True Me.lblUserName.Visible = True Me.txtUserName.Visible = True Me.txtAddress.Visible = True Me.txtPassword.Visible = True 76
  43. Me.txtUserName.Text = "" Me.txtAddress.Text = "" Me.txtPassword.Text = "" Me.txtUserName.Focus() Me.btnSave.Enabled = True Me.btnAdd.Enabled = False End Sub Hình 3.6. Kết quả thực hiện click Add trong trang vidu3_2.aspx Với thủ tục btnSave_Click để thêm dữ liệu vào CSDL như sau: Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Dim myConn As SqlConnection Dim MyCommand As SqlCommand Dim strConn As String = ConfigurationManager.AppSettings("Conn") Dim strUpdate As String strUpdate ="INSERT INTO Accounts(UserName,Password,Address) VALUES(@UserName,@Password, @Address)" myConn = New SqlConnection(strConn) myConn.Open() MyCommand = New SqlCommand(strUpdate, myConn) MyCommand.Parameters.AddWithValue("@UserName", txtUserName.Text) MyCommand.Parameters.AddWithValue("@Password", txtPassword.Text) MyCommand.Parameters.AddWithValue("@Address", txtAddress.Text) MyCommand.CommandType = CommandType.Text MyCommand.ExecuteNonQuery() myConn.Close() BindGrid() Me.btnAdd.Enabled = True Me.btnSave.Enabled = False End Sub 3.3. Các điều khiển dữ liệu ASP.Net 3.3.1. Giới thiệu các điều khiển dữ liệu * Giới thiệu Data Source Controls 77
  44. ASP.NET 2.0 cung cấp một vài kiểu điều khiển Data Source Controls làm việc tương thích với các kiểu Data Sources khác nhau, chúng bao gồm: + Điều khiển SqlDataSource control cho phép connections đến hầu hết các CSDL quan hệ. Provider mặc định là cho CSDL SQL Server, ngoài ra còn cho Oracle, OLEDB,.v.v + Điều khiển AccessDataSource control là trường hợp đặc biệt của điều khiển SqlDataSource control chứa provider được tối ưu cho CSDL Microsoft Access. + Điều khiển XMLDataSource control cho phép connection tới XML sources. + Điều khiển SiteMapDataSource control là mẫu được thiết kế riêng cho điều khiển XMLDataSource control. + Điều khiển ObjectDataSource control connects tới các đối tượng business. * Giới thiệu Data-Bound Controls Data-bound controls là các điều khiển buộc dữ liệu, cung cấp kết nối giữa các điều khiển data source controls với người sử dụng. Chúng có thể được phân loại theo cách hiển thị như sau: + Tabular Controls: Là các điều khiển hiển thị một danh sách dữ liệu của các bản ghi, gồm các điều khiển GridView, DataList, Repeater .v.v + Single Record Display Controls: Như các điều khiển DetailsView, và FormView hiển thị từng bản ghi ở tại mỗi thời điểm. + Selection List Controls: Là điều khiển cho phép người sử dụng lựa chọn. Có 2 điều khiển hiển thị một trường dữ liệu đó là ListBox controls và DropDownList controls. + Tree Controls: Là các điều khiển dữ liệu lưu trữ trên các nút. 3.3.2. Data Binding Expression ASP.NET buộc dữ liệu thông thường qua các khai báo hoặc qua các biểu thức buộc dữ liệu inline. Các biểu thức buộc dữ liệu (Data Binding Expressions) được khai báo trong cặp Các phương thức Eval() và Bind() được sử dụng để buộc các biểu thức với các điều khiển. Các biểu thức buộc dữ liệu được giải quyết khi phương thức DataBind() của các điều khiển được gọi trong file Code Behind. Thường thì phương thức này được gọi trong sự kiện Page_Load. Các điều khiển ASP.NET nhe GridView, DetailView, FormView, gọi phương thức DataBind() để thực thi kết nối khi chúng được buộc vào một điều khiển Data Sourcce. Biểu thức Mô tả Dùng định nghĩa cách liên kết dữ liệu chỉ đọc. Ví dụ: xuất dữ liệu ra Label. Dùng định nghĩa cách liên kết dữ liệu đọc ghi (cập nhật dữ liệu). Ví dụ: xuất dữ liệu ra TextBox, Ví dụ: CustomerName: '> 78
  45. CustID: '> 3.3.3. Giới thiệu điều khiển Data Bound Data-bound controls là các điều khiển buộc dữ liệu, cung cấp kết nối giữa các điều khiển data source controls với người sử dụng. Điều khiển GridView: Điều khiển Grid View là điều khiển phát triển từ điều khiển Data Grid (ASP.NET 1.0). Giống như DataGrid, GridView được sử dụng để hiển thị dữ liệu như một bảng dữ liệu. Sử dụng GridView để hiển thị, edit, delete, sort, và phân trang. GridView và DataGrid có thể buộc vào một điều khiển DataSourceControl, nhưng DataGrid chỉ cho chọn dữ liệu. Việc Sort, paging, updates, và delete phải được code bằng tay. GridView h ỗ t r ợ thuộc tính DataSourceID làm cho điều khiển có thể tích hợp được các khả năng sorting, paging, updating, và deleting của điều khiển data source. Ví dụ 3.4. Sử dụng GridView để hiển thị dữ liệu, sorting và paging (vidu3_5.aspx) " SelectCommand="SELECT [ProductID], [ProductType], [ProductName], [ProductDescription], [ProductSize], [ProductImageURL], [UnitPrice] FROM [Products]"> <asp:Image ID="Image1" runat="server" ImageUrl='<%# 79
  46. Eval("ProductImageURL")%>'/> Ta thực hiện thiết kế trong tab Design của cửa sổ Web Page Designer: - Kéo điều khiển GridView vào cửa sổ thiết kế. Sau đó mở Smart Task và chọn: DataSource, Paging để phân trang và Sorting dùng để sắp xếp dữ liệu (Hình 3.8). - Chọn Add New Column để thêm một cột thể hiện hình ảnh các sản phẩm. Xuất hiện hình 3.9. Chọn kiểu trường là TemplateFile và Header Text là Image. Sau đó click OK. - Chọn Edit Template và chọn Template vừa tạo để hiệu chỉnh xuất hiện cửa sổ hình 3.10. Trong cửa sổ này ta thêm thẻ và buộc điều khiển này vào trường ProductImageURL - Thực hiện phân trang hiển thị. Trong cửa sổ Properties mở rộng thuộc tính PagerSetting và Page size để định dạng phân trang (hình 3.11): + Mode: Kiểu duyệt trang (NextPreviousFirstLast, Numeric, NextPrevious, NumericFirstLast). + NextPageImagerURL: Địa chỉ ảnh của nút Next. + NextPageText: Chuỗi Text của nút Next Tương tự cho các nút còn lại, + Pagesize: Số bản ghi trên một trang Kết quả duyệt ví dụ 3.4 trong hình 3.12. Hình 3.8. Cửa sổ Web Page Designer 80
  47. Hình 3.9. Cửa sổ Add File Hình 3.10. Cửa sổ Edit Template 81
  48. Hình 3.11. Cửa sổ Properties Hình 3.12. Duyệt ví dụ 3.4. Điều khiển DataList và Repeater Controls: 82
  49. Là các điều khiển mà toàn bộ thông tin của bản ghi sẽ được hiển thị trên một cell. Điểm khác nhau giữa hai điều khiển này là DataList có định dạng và template mặc định còn Repeater không có mà phải tự thiết kế. Cách tạo DataList tương tự như GridView. Ví dụ 3.5. Sử dụng điều khiển DataList (vidu3_6.aspx) " SelectCommand="SELECT [ProductID], [ProductType], [ProductName], [ProductDescription], [ProductSize], [ProductImageURL], [UnitPrice] FROM [Products]"> ' /> Mã sản phẩm: '> Tên sản phẩm: '> Kiểu sản phầm: '> Mô tả: '> Kích thước sản phẩm: '> Giá sản phẩm (USD): '> Kết quả triệu gọi ví dụ 3.5. cho trong hình 3.22 83
  50. Hình 3.13. Duyệt ví dụ 3.5. Ví dụ 3.6. Sử dụng điều khiển Repeater (vidu3_7.aspx) " SelectCommand="SELECT [ProductID], [ProductType], [ProductName], [ProductDescription], [ProductSize], [ProductImageURL], [UnitPrice] FROM [Products]"> ' /> Mã sản phẩm: '> Tên sản phẩm: '> Kiểu sản phầm: '> Mô tả: '> Kích thước sản phẩm: '> Giá sản phẩm (USD): 84
  51. '> Kết quả triệu gọi ví dụ 3.6. cho trong hình 3.14. Hình 3.14. Duyệt ví dụ 3.6. Điều khiển DetailsView và FormView Controls: Đây là hai điều khiển buộc dữ liệu, tại một thời điểm chỉ hiển thị một bản ghi. Khi buộc dữ liệu, điều khiển DetailsView tự động tạo các template, FormView chỉ tạo ra thẻ trắng và người thiết kế phải tự thiết kế các template. Ví dụ 3.8. Minh họa việc sử dụng kết hợp điều khiển GridView và điều khiển DetailView. Điều khiển GridView hiển thị danh sách các sản phẩm còn điều khiển DetailView hiển thị thông tin chi tiết sản phẩm mà người dùng chọn trên điều khiển GridView. " SelectCommand="SELECT [ProductID], [ProductType], [ProductName], [UnitPrice] FROM [Products]"> <asp:BoundField DataField="ProductID" HeaderText="Mã sản phẩm" 85
  52. SortExpression="ProductID" /> " SelectCommand="SELECT [ProductID], [ProductType], [ProductName], [ProductDescription], [ProductSize], [ProductImageURL], [UnitPrice] FROM [Products] WHERE ([ProductID] = @ProductID)"> Thông tin chi tiết ' /> 86
  53. Chú ý: Xây dựng mệnh đề Where cho điều khiển SqlDataSource2 để kết nối dữ liệu giữa hai điều khiển như hình 3.14. Kết quả duyệt ví dụ 3.8. cho trong hình 3.15. Hình 3.14. Xây dựng mệnh đề Where. 87
  54. Hình 3.15. Duyệt ví dụ 3.8. 3.3.4. Giới thiệu điều khiển Data Sources Điều khiển SqlDataSource control: Ta sử dụng điều khiển SqlDataSource control theo các bước cơ bản sau: - Trong cửa sổ thiết kế trang Design View, kéo điều khiển SqlDataSource control vào vùng thiết kế (hình 3.16). Hình 3.16. Cửa sổ thiết kế Web Page Designer - Mở smart task panel và click Configure Data Source. Xuất hiện cửa sổ Choose your Data connection hình 3.10. Chọn New Connection. 88
  55. Hình 3.17. Cửa sổ Choose your Data connection - Trong cửa sổ Cửa sổ Add connection (hình 3.17) ta nhập các thông tin kết nối và click OK để quay về cửa sổ 3.16 và chọn Next để tiếp tục. Hình 3.18 Cửa sổ Add connection - Trong cửa sổ Save connection string to the Application Configuration file (hình 3.19). Cho phép có lựa chọn save chuỗi kết nối này trong file web config hay không? 89
  56. Hình 3.19. Cửa sổ Save connection string - Trong cửa sổ Configure the Select Statement (hình 3.20) ta chọn các trường cho câu lệnh Select. Chú ý, trong cửa sổ này có các nút Where để thiết lập cho mệnh đề Where cho câu lệnh Select (hình 3.21); nút Order By để sắp xếp dữ liệu. Hình 3.20. Cửa sổ Configure the Select Statement - Chọn Next, xuất hiện cửa sổ Test Query (hình 3.22) để Test truy vấn vừa tạo. Hình 3.21. Cửa sổ thiết lập cho mệnh đề Where. - Chọn Finsh để kết thúc. 90
  57. Hình 3.22. Cửa sổ Test Query. Các bước trên tương ứng với khai báo thẻ như sau: ” SelectCommand=”SELECT [ProductID], [ProductType], [ProductName], [ProductDescription], [ProductSize], [ProductImageURL], [UnitPrice] FROM [Products]”> Chuỗi kết nối được khai báo trong tệp web config như sau: Chú ý: - Khi không Save chuỗi kết nối trong tệp web config thì chuỗi kết nối đó sẽ được khai báo tường minh trong source như sau. - Trong lập trình người ta thường kết hợp hai cách thiết kế: Dùng chỉ dẫn của Design View sau đó chuyển sang Source để hiệu chỉnh lại. 91
  58. 3.3.5. Các thao tác dữ liệu với Data Controls a) Giới thiệu các thao tác ghi dữ liệu Không phải tất cả các điều khiển dữ liệu đều hỗ trợ cho việc ghi dữ liệu. Đối với các điều khiển data source controls, tất cả đều support cho việc ghi dữ liệu trừ điều khiển SiteMapDataSource. Nhưng giữa các điều khiển buộc dữ liệu (data-binding controls) còn có khá nhiều các hạn chế. Các điều khiển chọn danh sách dữ liệu (DropDownList và ListBox) không support cho việc ghi dữ liệu. Các điều khiển buộc dữ liệu trong phiên bản mới ASP.NET 2.0 support cung cấp các phương thức tốt nhất cho việc ghi dữ liệu là: GridView, DetailsView, và FormView. Tuy nhiên, GridView chỉ có thể update các bản ghi đã tồn tại, không tạo mới bản ghi đã tồn tại, không tạo mới các bản ghi. DataList và Repeater có thể sử dụng cho việc ghi dữ liệu, nhưng chúng là các điều khiển trong các phiên bản cũ nên trong một số trường chúng ta phải sử dụng các công nghệ cũ trong ASP.NET 1.1. b) Updating các bản ghi Trước khi đi vào các thao tác ghi dữ liệu ta xét thuộc tính DataKeyNames của điều khiển buộc dữ liệu liên quan đến các thao tác đó. Thuộc tính DataKeyNames: Tại cùng một thời điểm ta có thể có cùng một vài kiểu ghi dữ liệu cho một trường, do đó Visual Web Developer thêm thuộc tính DataKeyNames cho điều khiển buộc dữ liệu với mục đích giữ cả hai giá trị cũ và mới của một trường nào đó làm cho việc ghi dữ liệu được thực hiện một cách chính xác. Để hiểu vai trò của thuộc tính DataKeyNames, ta hình dung trong hệ thống web site có một bảng ghi thông tin các ý kiến phản hổi từ khách hàng gọi là Comments. Trong bảng ta có một trường đầu tiên là trường kiểu số CommentsID nhận giá trị duy nhất cho mỗi dòng. Khách hàng sẽ gửi các ý kiến kiến phản hồi của mình và được lưu trong bảng. Đến một lúc nào đó các thông tin được sắp xếp lộn xộn và nhà quản trị phải thay đổi các ID cho các ý kiến đó, ví dụ từ 20 chuyển sang 19. Để làm điều này, người quản trị sẽ chọn bản ghi muốn thay đổi (chẳng hạn dùng điều khiển Grid view) và ASP.NET 2.0 sẽ lưu giá trị ID đó vào một tham số. Người quản trị sẽ gửi câu lệnh như sau đến database: UPDATE Comments SET Comment =19 WHERE Comment =@CommentID Lưu ý là trong câu lệnh trên tên trường đã thay đổi (CommentsID) để câu lệnh nhận dạng bản ghi cần thay đổi giá trị. Đúng ra phải là WHERE CommentsID=@CommentsID nhưng sẽ bị xảy ra xung đột bởi vì @CommentsID nhận hai giá trị: Một giá trị cũ được lưu trên GridView (giá trị 20) và một giá trị mới do người quản trị nhập vào (19). DataKeyNames giải quyết vấn đề này bằng cách tạo một từ điển giữ hai giá trị này cho các trường trong danh sách của chúng: Một giá trị cũ và một giá trị mới. Khi câu lệnh được gửi đến Database, ASP.NET sử dụng khả năng thông minh của mình để cung cấp giá trị mới từ DataKeyNames cho mệnh đề SET của câu lệnh và sử dụng giá trị cũ từ DataKeyNames cho mệnh của câu lệnh. Thật là lãng phí và chậm khi load up từ điển DataKeyNames với mọi trường, đặc biệt là bởi vì hầu hết các trường không gây ra sự xung đột như trên. Visual Web Developer tự động adds các trường mà cấu trúc của nó duy nhất trong database. Ta sử dụng thuộc tính DataKeyNames để thiết lập một danh sách các trường (cách nhau bởi dấu phẩy) thể hiện khóa chính của data source. Khi thuộc tính 92