Giáo trình ASP
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình ASP", để 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:
- giao_trinh_asp.pdf
Nội dung text: Giáo trình ASP
- z Giáo trình ASP
- ASP I. Active Server Pages (ASP) là gì? Microsoft Active Server Pages (ASP) là một môi trường kịch bản dựa trên server (server-side scripting) cho phép tạo hoặc xây dựng các ứng dụng Web mạnh chứa các thẻ HTML, văn bản và các lệnh script hay các ứng dụng Web động, giao tiếp giữa Client và server một cách hiệu quả. Các trang ASP có thể gọi các thành phần ActiveX để thực hiện các công việc như kết nối với một database hoặc thực hiện một tính toán kinh doanh. Với ASP, bạn có thể đưa nội dung tương tác với các trang Web của bạn hoặc xây dựng toàn bộ các ứng dụng Web sử dụng các trang HTML như giao tiếp với khách hàng của bạn. Trang ASP: Mỗi trang .asp có thể bao gồm một trong các thành phần sau: HTML, Script của ngôn ngữ VB Script hoặc Jscript, Text trong đó các tag HTML và Text sẽ được xử lý bình thường như đối với các văn bản HTML (.html) thông thường, các script sẽ được một bộ phận (engine) của ASP thông dịch và thi hành trên server. Có thể xem trang ASP như một trang HTML có bổ sung các ASP Script Command Hoạt động của trang ASP: Sau khi môi trường ASP thực hiện việc thực thi các file .asp xong nó sẽ trả lại kết quả ở dạng HTML cho Web Server, tiếp theo Browser sẽ nhận được nội dung cần trình bày từ Web Server thông qua giao thức HTTP. Một trang ASP cũng sẽ được Brower tham khảo tới bình thường như là nó đã tham khảo tới một trang HTML của Web. Trang Asp khi ở trên Web Server và khi được đưa ra Browser Sơ đồ một ứng dụng trên Web ASP: Web Server: là nơi tiếp nhận và trả lời các yêu cầu của Web user, đồng thời cũng thực hiện việc kết nối đến hệ DBMS trên Database Server theo yêu cầu truy cập dữ liệu của 1
- trang ASP. ADO cung cấp giao diện lập trình cho người phát triển xây dựng các lệnh truy cập CSDL, các lệnh này được chuyển đến cho hệ DBMS để thực thi thông qua các thành phần OLEDB (và ODBC). Kết quả truy vấn dữ liệu sẽ được Web Server đưa ra hiển thị trên Browser. Database Server: nơi diễn ra việc thực thi các thao tác CSDL như truy vấn, cập nhật cũng như bào đảm tính toàn vẹn dữ liệu của hệ DBMS. Browser: giao diện với người dùng, tiếp nhận các yêu cầu của người sử dụng cũng như hiển thị kết quả yêu cầu. Sơ đồ một ứng dụng trên WEB Một vài đặc điểm của ASP: - Việc chèn các Script vào file HTML làm cho quá trình xử lý tạo ra văn bản HTML (Dynamic Pages) đồng thời với việc xử lý các Script, điều bày sẽ làm cho hoạt động của trang Web sẽ trở nên linh động hơn, uyển chuyển hơn. - Các file .asp cũng tương thích với file HTML, và việc viết các script đơn giản, không phải biên dịch hay liên kết như việc lập trình thông thường, ASP cung cấp các đối tượng tiện lợi cho nhiều thao tác như: Request, Response, Server, Apllication, Session. Các đối tượng có sẵn này của môi trường ASP sẽ giúp cho việc giao tiếp dữ liệu giữa Client và Server thực sự tiện lợi, cũng như việc quản lý ứng dụng một cách linh hoạt nhờ vào các biến Session, Application. 2
- II. Các thành phần & cú pháp ASP: ASP bao gồm các thành phần sau: 1. Các bộ dịch ngôn ngữ VBScript và Jscript. 2. Thư viện các đối tượng, chuyên dùng để truy xuất Database thông qua ODBC Driver (Active Server Data Object – ADO). Thư viện các đối tượng hỗ trợ cho việc viết các trang ASP. Một file ASP thực chất là một văn bản, nó có thể bao gồm các thành phần sau: + Văn Bản (Text) + Các HTML tag + Các Script. Mỗi Script này sẽ thực hiện một công việc nào đó, giống như các phát biểu của một ngôn ngữ lập trình. Một Script là một chuỗi các lệnh script, nó có thể là: 1. Một phép gán giá trị cho một biến 2. Một yêu cầu Web server gửi thông tin đến Brower. 3. Tổ hợp các lệnh riêng rẽ thành một thủ tục hay một hàm giống như trong các ngôn ngữ lập trình. Việc thi hành một script là quá trình gửi chuỗi các lệnh tới Scripting Engine, tại đây ASP sẽ thông dịch các lệnh này và chuyển tiếp cho máy tính. Script được viết bằng một ngôn ngữ với các luật được đặt tả nào đó, nếu ta muốn sử dụng một script language nào thì trên server phải chạy Script Engine cho ngôn ngữ đó. Trong ASP cung cấp hai Script Engine là VBScript và Jscript (với VBSCRIPT là mặc nhiên). Tuy nhiên ASP không phải là ngôn ngữ Script, mà nó chỉ cung cấp một môi trường để xử lý các Script mà ta chèn vào trong các file .asp, việc chèn này phải tuân theo một cú pháp nhất định của ASP. Cú pháp 1. Dấu ngăn cách (Delimiter): Trong văn bản ASP ta sử dụng các dấu để ngăn cách phần văn bản HTML với phần Script, hay cụ thể là bất cứ một phát biểu Script nào cũng đều phải nằm giữa hai ngăn cách Ví dụ: là một script thực hiện việc gán chuỗi Hello vào biến say Biểu thức đơn: Bạn cần đưa vào (include) bên trong dấu ngăn cách ASP nhiều biểu thức cho ngôn ngữ scripting đầu tiên. Ví dụ, với dòng sau là kết quả cuối cùng của văn bản với thời gian hiện hành của server: This page was last refeshed at Trong trường hợp này, Web server trả về giá trị now của hàm VBScript từ browser với text. 2. Câu lệnh (Statement): Một câu lệnh trong VBScript hay trong ngôn ngữ script khác là một cấu trúc dùng để thực hiện một thao tác, câu lệnh phải được khai báo hoặc định nghĩa trong ngôn ngữ 3
- scripting. Các ngôn ngữ script trong ASP cung cấp cho ta hầu hết các cấu trúc điều khiển: IF ELSE, For, While, DO WHILE cùng với những kiểu dữ liệu cơ bản như integer, char, string, Array sau sử dụng Ví dụ: sử dụng câu lệnh If của VBScript =#12:00:00 AM# And Time dòng sau sẽ gởi giá trị trong Green tơí Client browser 3. SCRIPT tag: Các phát biểu, biểu thức, lệnh, hay thủ tục mà bạn sử dụng bên trong hai dấu ngăn cách phải được nhìn nhận bởi ngôn ngữ Script mặc định hoặc ngôn ngữ Script được khai báo ở đầu trang ASP. Ngôn ngữ scripting mặc định của ASP là VBScript, tuy nhiên với ASP ta vẫn có thể sử dụng các ngôn ngữ lập trình khác bên trong bằng cách sử dụng thẻ và Ví du: ") document.write("second line of for loop"+ i+" ") //end script hiding > trong file ASP sau xử lý JScript trong hàm MyFunction function MyFunction () { Response. Write("MyFunction Called") 4
- } Chú ý: bên trong tag phải là các thủ tục, không có một biểu thức xuất hay phát biểu nào nằm bên ngoài các thủ tục. 4. Include file: Khi tạo một ứng dụng Web, bao gồm nhiều trang ASP, nếu như toàn bộ các trang đều cần sử dụng những thông tin chung nào đó chẳng hạn như các hằng, giá trị để tránh lại việc định nghĩa lại các giá trị này ta có thể sử dụng cơ chế include file của ASP (giống như trong ngôn ngữ lập trình cổ điển). Để include một file trong trang ASP ta sử dụng cú pháp sau: Ví dụ: Bạn phải định nghĩa kiểu Virtual hoặc file. Trong đó qui định file được include phải có phần mở rộng là .inc hoặc .asp, phần filename bao gồm cả đường dẫn và tên file. sử dụng từ khóa virtual: Tham sốVirtual dùng để chỉ định rằng đường dẫn được bắt đầu với một thư mục ảo (Virtual Directory) Vd: Sẽ include bất kỳ tập nào trên site của bạn (whatever là nằm trên thư mục gốc của web server) nhưng bạn phải cung cấp tên tập tin với 1 đường dẫn sử dụng từ khóa file Tham số file dùng để chỉ định đường dẫn Relative, được bắt đầu với tên thư mục chứa file cần include. Chẳng hạn nếu bạn có 1 file trong thư mục myapp và file header1.inc trong myapp/header, dòng sau sẽ chèn header1.inc vào trong file của bạn. Chú ý rằng đường dẫn để include file headers/header1.inc thì có liên quan đến việc include file, nếu nội dung của script này có cú pháp include là thư mục /myapp, cú pháp sẽ không hoạt động. ASP includes files trước khi thực thi lệnh script. Vì thế, bạn không thể sử dụng một lệnh script để xây dựng tên của 1 file include. chẳng hạn script sau không thể mở file Header1.inc bởi vì ASP chiếm để thực thi chỉ thị include trước khi gán một tên file cho giá trị name " > Lệnh script và thủ tục phải hoàn toàn bao hàm dấu ngăn cách trong script, tag HTML và hoặc tag HTML và . sử dụng server script: Để bổ sung 1 client Script, mặc dù ASP sử dụng Script server site để xử lý văn bản, bạn có thể mở rộng bằng cách sử dụng nó để phát sinh ra client side script sau được xử 5
- lý bởi client browser. ASP làm điều này bằng cách kết hợp client_side script bao gồm những chú thích HTML của server _side script và bao gồm cả dấu ngăn cách: client script client script > Với chức năng trong scripts của bạn, bạn có thể tạo ra 1 ứng dụng thú vị. Chẳng hạn script sau sử dụng một database để cung cấp mẫu tin script client như là kết quả hành động của user. Trong Script sau ASP tìm dữ liệu từ Database và phát ra mỗi chương trình con cho mỗi dòng dữ liệu. Chương trình con đó điều khiển cái gì xảy ra khi 1 user click vào liên kết trong trang hiển thị trong client browser. Chú ý: Trong script này sẽ không có hàm của chính bản thân nó. Nó cho thấy ở đây chỉ minh họa chức năng của ASP nếu sử dụng trang liên kết với Database, server-side scripting và client-side scripting. Lưu ý: Việc include file có thể gây nên một vòng lặp nếu file được include lại gọi include một file khác, hay file ban đầu. Vì Asp sẽ include file trước khi xử lý các Script cho nên ta không thể sử dụng một lệnh mà lệnh này lại tạo ra một lời gọi include, hoặc sử dụng include như sau là sai: " > Ta cũng không thể mở dấu trong một file include khác, ví dụ sau là sai: Next %> Script sau sẽ hoạt động được: <% For i = 1 to n 6
- statements in main file %> III. CÁC ĐỐI TƯỢNG CƠ BẢN CỦA ASP: ASP cung cấp cho người lập trình các đối tượng có sẵn, mỗi đối tượng này sẽ thực hiện một chức năng riêng nào đó, các đối tượng có sẵn (built-in object) bao gồm: Tên đối tượng Chức năng Request Lấy thông tin từ một user Respone Gửi thông tin tới một user Server Điều khiển môi trường hoạt động của ASP Session Lưu giữ thông tin về một session của user Application Chia sẻ thông tin giữa các user trong cùng một ứng dụng. III. 1. Đối tượng Request Với đối tượng Request, các ứng dụng ASP có thể dễ dàng lấy được thông tin gửi tới từ user. Đối tượng Request cho phép truy xuất chi tới bất kỳ thông tin nào user gửi tới bằng giao thức HTTP như: 1. Các thông tin chuẩn nằm trong các biến Server (Server Variable) 2. Các tham số được gửi tới bằng phương thức POST 3. Các thông tin được gửi tới bằng phương thức GET 4. Các cookies (là thông tin của user được gửi kèm theo) tới từ Browser 5. Các Client Certificates Đối tượng Request tìm kiếm các giá trị mà client browser đưa vào server trong khi có một yêu cầu HTTP Cú pháp: Request.collection|property|method Collections Cookies Giá trị của các cookie gởi trong yêu cầu HTTP Form Giá trị các phần tử form trong thân của yêu cầu HTTP QueryString Giá trị của các biến trong chuỗi truy vấn HTTP ServerVariables Giá trị của các biến môi trường đã được xác định trước Properties TotalBytes Tổng số byte client đang gởi trong thân của yêu cầu Các tham số biến là chuỗi ký tự chỉ rõ mục (item) được tìm kiếm từ một collection hoặc được sử dụng như là mục vào đối với một phương thức (method) hoặc một property 7
- Ghi chú: Tất cả các biến có thể được truy cập một cách trực tiếp bằng cách gọi cú pháp Request (variable) mà không cần tên collection. Trong trường hợp này, Web server tìm kiếm các collection theo thứ tự sau: 1. QueryString 2. Form 3. Cookies 4. ClientCertificate 5. ServerVariables III.1. Làm việc với các HTML FORM Sử dụng đối tượng Request, bạn có thể tạo và xử lý thông tin với HTML FORM, HTML FORM là cách thức thông thường để trao đổi thông tin giữa Web server và user, nó cung cấp nhiều cách nhập thông tin của user: Text boxes, Buttons, Check boxes cho phép user tương tác với trang Web và Submit thông tin tới một Web Server. Ví dụ: Tạo một FORM để user có thể nhập vào họ tên, tuổi và đưa vào một nút để submit thông tin tới Web server. FORM cũng chứa một điều khiển hidden để đưa thêm thông tin tới Web server. III. 2 Xử lý FORM nhập vào với ASP Khi một FORM submit thông tin tới Web server, Web browser của user yêu cầu file .asp chỉ định trong thuộc tính ACTION của thẻ HTML . File .asp chứa đoạn script thực hiện việc xử lý giá trị FORM như hiển thị một bảng nội dung kết quả hoặc truy vấn thông tin từ một cơ sở dữ liệu. Bạn có thể sử dụng file .asp để thu thập giá trị HTML FORM một trong 3 cách: File .html chứa các form và submit giá trị của nó tới một file .asp. File .asp có thể tạo form và chuyển giá trị tới một file asp khác. File .asp có thể tạo form và gửi thông tin tới chính nó đó là đến file .asp mà chứa đựng form. III. 3 Lấy thông tin nhập vào FORM Sử dụng QueryString Collection QueryString collection lấy lại các giá trị form đưa vào Web server của bạn như là một chuỗi sau một dấu? trong yêu cầu URL. Việc sử dụng Querystring collection làm cho việc truy xuất thông tin trở nên dễ dàng hơn 8
- Cú pháp Request. QueryString(variable)[(index)|. Count] Các tham số Variable tên của biến trong chuỗi query HTTP. Index Cho phép bạn truy vấn một trong các giá trị cho variable. Nó có thể là bất kỳ số nguyên nào trong khoảng từ 1 tới Request. QueryString(variable).Count. Nếu phương thức gởi từ form là POST thì Querystring chứa tất cả thông tin gửi tới như là 1 tham số sau trang URL. Nếu phương thức gởi từ form là GET thì Querystring Collection chứa toàn bộ thông tin gửi tới như là các tham số đi đằng sau dấu “?” trong URL. Như vậy nếu phương thức là GET thì toàn bộ thông tin gởi tới sẽ nằm trong Querystring Collection. Ví dụ: nếu ví dụ trước đó sử dụng phương thức GET(ACTION= “GET”) và người sử dụng gõ vào Jeff, Smith, và 30, sau đó yêu cầu URL sẽ được gởi tới server là: Myfile.asp có thể chứa đoạn script xử lý như sau: Hello, . You are years old. Trong trường hợp này, Web sever của bạn sẽ trả về đoạn văn bản sau tới Web browser của user: Hello, Jeff Smith. You are 30 years old. This is your first visit to this Web site! Khi có nhiều biến cùng một tên và mỗi biến có giá trị khác nhau. Khi đó, QueryString collection có một tham số dùng để truy cập nhiều giá trị xuất hiện trong thân của yêu cầu. Bạn có thể sử dụng đặc tính Count để đếm số lần mà một kiểu đặc trưng giá trị xuất hiện. Ví dụ: một FORM chứa một list box với nhiều mục có thể trả lại như sau: Để hiển thị nhiều kiểu giá trị, List.asp có thể chứa đoạn script sau: và kết quả hiển thị là: apples 9
- olives bread III. 4. Sử dụng Form Collection Form collection chứa toàn bộ các giá trị mà user nhập vào FORM sau đó gửi bằng phương thức POST. Phương thức POST gởi dữ liệu FORM trong thân yêu cầu HTTP, có thể gởi không giới hạn số ký tự tới server Cú pháp Request. Form(element)[(index)|.Count] Các tham số Element tên của phần tử form collection cần truy vấn. Index Một tham số lựa chọn cho phép bạn truy vấn một trong các giá trị đối với một tham số. Nó có thể là bất kỳ số integer nằm trong vùng từ 1 đến Request.Form(thamsố).Count. Ghi chú Form collection được chỉ mục bởi tên trong thân của yêu cầu. Giá trị của Request. Form (element) là một dãy của tất cả các giá trị của element xuất hiện trong thân của yêu cầu. Bạn có thể xác định số giá trị của một tham số bằng cách gọi Request.Form(element).Count. Để tham khảo một giá trị đơn của một phần tử form có nhiều giá trị, bạn phải chỉ định một giá trị cho index. Tham số index có thể là bất kỳ số nào giữa 1 và Request.Form(element).Count. Ví dụ: nếu user điền vào FORM bằng cách đưa vào một danh sách tên thì bạn có thể lấy lại các tên với đoạn script sau: 2. Sử dụng ServerVariables collection ServerVariables collection lấy lại các giá trị các biến môi trường đã được xác định trước. ServerVariables cung cấp thông tin từ tiêu đề HTTP với một yêu cầu của user. Cú pháp Request.ServerVariables (server environment variable) Tham số server environment variable: là tên của biến môi trường. Bạn có thể sử dụng vòng lặp để lặp thông qua tên các biến server. Ví dụ, đoạn script sau sẽ in ra tất cả các giá trị của các biến môi trường trong một bảng. ServerVariable Value 10
- Ví dụ: sử dụng đối tượng Request để hiển thị một số biến môi trường. ALL_HTTP server variable = CONTENT_LENGTH server variable = CONTENT_TYPE server variable = QUERY_STRING server variable = SERVER_SOFTWARE server variable = Ví dụ: sử dụng ServerVariables collection để chèn tên server vào trong một siêu liên kết (hyperlink). III. 5. Gửi thông tin trong cùng một file.asp: - Với ASP bạn phải định nghĩa động 1 form trong 1 file .asp mà đặt giá trị đầu vào trả lại chính bản thân nó. - ASP cho phép một file.asp có chứa From, khi user điều khiển các giá trị vào From rồi gửi (Submit) thì chính file .asp sẽ nhận được các thông tin này và xử lý. III. 6. Đối tượng Response Bạn có thể sử dụng đối tượng Response để gởi kết xuất tới client. Cú pháp Response.collection|property|method Collections Cookies Chỉ định giá trị cookie và thiết lập các giá trị cookie. Properties Buffer Chỉ ra liệu trang kết xuất được đệm hay không. ContentType Chỉ định kiểu nội dung HTTP(vd:”Text/HTML”) khi đáp ứng. Expires Chỉ định thời gian trước khi một trang lưu trữ trên browser kết thúc. Status Server trả về giá trị của trạng thái dòng. Methods AddHeader Thiết lập tên (name) tiêu đề HTML bằng giá trị (value). Clear Hủy bỏ vùng đệm kết xuất HTML. End Dừng xử lý tập tin .asp và gởi trả kết quả hiện hành Redirect Chỉ dẫn browser kết nối tới một URL khác. 11
- Write Xuất một biến tới trang hiện hành như là một chuỗi. III.6.1 Gởi nội dung Để gởi trở lại một trang chứa văn bản, hình ảnh và các nội dung khác tới browser bên trong dấu ngăn cách ASP hoặc từ một thủ tục. Sử dụng phương thức Write của đối tượng Response. Cú pháp Response.Write variant Tham số Variant Dữ liệu để xuất. Tham số này có thể là bất kỳ dữ liệu nào mà ngôn ngữ script hỗ trợ (kể cả các ký tự, chuỗi, số nguyên). Ví dụ 1: câu lệnh gởi lời chào khác nhau tới user tùy thuộc vào user đã viếng thăm trang trước đó bao nhiêu lần: Welcome to the Overview Page " Else Response.Write " Welcome Back to the Overview Page " End If %> Bên ngoài một thủ tục, bạn không cần phải sử dụng phương thức Response.Write để gởi nội dung trở lại tới user. Nội dung này thì không nằm trong dấu ngăn cách scripting mà được gởi trực tiếp tới browser. Ví dụ 2: đoạn script sau sẽ có kết xuất như đoạn script trước: Welcome to the Overview Page. Welcome Back to the Overview Page. III.6.2 Gởi cookie tới browser Một Cookie được coi như một dấu hiệu đi kèm theo người sử dụng trong quá trình trao đổi thông tin giữa Client browser vàWeb server hoặc giữa Web server và Client browser. Cookies cung cấp cho 1 kiểu của tham tin từ sự giao kết với người sử dụng. Các script của ASP có thể sử dụng Cookies collection để thiết lập giá trị của một Cookie. Khi dùng Response. Cookies nếu cookie được đặc tả chưa tồn tại thì nó sẽ được tạo mới, nếu Cookie đã tồn tại thì nó sẽ lấy giá trị mới, giá trị cũ sẽ bị loại bỏ. Cú pháp: Response.Cookies(cookie)[(key)|.attribute] = value Các tham số Cookie Tên của cookie. 12
- Key Tham số lựa chọn. Nếu key được chỉ định, cookie là một từ điển và key thì thiết lập giá trị (value). Attribute Chỉ định thông tin về cookie đó. Các thuộc tính có thể là: Tên Mô tả Domain Nếu chỉ định, cookie chỉ được gởi tới yêu cầu của vùng domain đó. Expires Ngày cookie kết thúc. Cookie sẽ kết thúc khi session kết thúc. HasKeys Chỉ định cookie chứa các khóa hay không. Path Nếu chỉ định, cookie chỉ được gởi yêu cầu tới đường dẫn này. Nếu không, đường dẫn của chương trình ứng dụng được dùng. Secure Chỉ định có được bảo đảm hay không. Value Giá trị để gán vào key hoặc attribute. Ví dụ: bạn có thể thiết lập giá trị cho một cookie và gán các giá trị vào các thuộc tính (attribute) của nó III. 6. 3 Chuyển hướng điều khiển browser Thay vì gởi một nội dung tới user, ta có thể gởi một thông báo đến browser để nó chuyển tới một URL khác bằng cách sử dụng phương thức Redirect. Cú pháp Response.Redirect URL Tham số URL Địa chỉ URL (Uniform Resource Locator) mà ta chuyển hướng điều khiển tới. Ví dụ: Bạn muốn khi khách thăm Website của bạn thì họ đăng ký trước khi sử dụng nó. Ta tạo một Form có tên là register.asp: register.asp Register Registration: Please enter your first name: Please enter your last name: 13
- Sau đó để kiểm tra xem user có đưa vào đầy đủ thông tin hay không. Nếu không thì chuyển hướng điều khiển về lại trang đăng ký là “register.asp”. regresults.asp Registration Results for registering! %> Chú ý: Nếu sử dụng Response.Redirect sau khi một nội dung đã được gửi về cho user thì sẽ xảy ra lỗi. III.6.4 Đệm trang Bình thường, khi một trang ASP được xử lý trên server, kết xuất được gởi tới browser ngay lập tức sau khi mỗi lệnh trong trang được thực thi. Khi bạn muốn đệm kết xuất của một trang ASP thì server sẽ không gởi đáp ứng nào tới client cho đến khi tất cả các server script trong trang hiện hành đã được xử lý hoặc là cho đến khi phương thức Flush hoặc End được gọi. Buffer property không thể thiết lập khi server đã gửi nội dung về client, vì thế để thiết lập ta phải gọi Response.Buffer ở đầu trang. Cú pháp Response.Buffer [= flag] Các tham số Flag Chỉ định trang kết xuất có được đệm hay không. Giá trị Mô tả FALSE Không đệm. Server gởi kết xuất tới client buffer được xử lý. TRUE Server không gởi kết xuất tới client cho đến khi tất cả các đoạn script ASP trên trang hiên hành đã được xử lý hoặc cho đến khi phương thức Flush hoặc End được gọi Giá trị Buffer mặc định cho tất cả các trang ASP là FALSE. Tuy nhiên bạn có thể đặt buffer của đối tượng Response là TRUE để thi hành các script trong một trang trước khi gởi tới user Ví dụ: đoạn script này sẽ hiển thị các số từ 1 đến 100 nhưng tất cả nội dung của trang được gởi cùng một lúc tới browser cho đến khi đoạn script xử lý xong. 14
- Buffer Example ” Next %> Có thể sử dụng Buffer để xác định tại một số điểm nào đó của trang được xử lý, mà ở đó ta không muốn gửi nội dung trước đó tới người sử dụng, lúc đó có thể sử dụng phương thức Redirect để kết nối người sử dụng với URL khác, hoặc sử dụng phương thức Clear để xóa Buffer và gởi nội dung khác tới người sử dụng. Ví dụ: Choose.asp News Sport Music jump.asp 15
- III.6.5 Thiết lập kiểu nội dung của trang ContentType property chỉ rõ kiểu nội dung của thân đáp ứng (kiểu MIME). Các kiểu phổ biến là: “text/HTML”, “image/GIF”, “application/msword”, “text/rtf” Nếu ContentType không được chỉ định, mặc định là text/HTML. Cú pháp Response.ContentType [= ContentType ] Tham số ContentType Chuỗi mô tả nội dung kiểu dữ liệu. Chuỗi này thường được định dạng là type/subtype sao cho type là loại nội dung tổng quát và subtype là kiểu nội dung đặc trưng. Ví dụ 1: để hiển thị source code của một văn bản HTML, bạn thiết lập ContentType property thành “text/plain”, thân của đáp ứng được gởi như là một văn bản bình thường hơn là một trang HTML. HTML Document This is an HTML Document Khi đó browser sẽ hiển thị trang nhận được như một trang văn bản bình thường chứ không phải là một trang HTML. Ví dụ 2: để hiển thị trang trên Web browser làmột trang HTML, bạn thiết lập ContentType property thành “text/HTML” HTML Document This is an HTML III.6.6 Mã trạng thái Status property chỉ định giá trị của dòng trạng thái trả về bởi server trong một đáp ứng HTTP, property này không sửa đổi tiêu đề. Giá trị các trạng thái được định nghĩa trong đặc tả HTTP. Cú pháp: Response.Status = StatusDescription Tham số StatusDescription Một chuỗi gồm có 3 chữ số cho biết mã trạng thái. Ví dụ: trả về mã trạng thái 401 Not Authorized nếu ai đó truy tìm trang ASP trong ngày Wednesday 16
- Not Wednesday Today is not Wednesday. III. 7. Đối tượng Server Đối tượng server cung cấp truy cập tới các phương thức và đặc tính (property) trên server. Hầu hết các phương thức và đặc tính (property) server như là các chức năng tiện ích. Cú pháp Server.property|method Properties ScriptTimeout Khoảng thời gian mà một script có thểchạy trước khi hết thời gian (time out). Methods CreateObject Tạo một thực thể (instance) của một đối tượng hoặc thành phần server. HTMLEncode Mã hóa chuỗi thành dạng HTML. MapPath Ánh xạ đường dẫn ảo, đường dẫn tuyệt đối hay tương đối trên server hiện hành vào một đường dẫn vật lý. URLEncode Mã hóa chuỗi kí tự thành dạng URL. III. 7. 1 ScriptTimeout ScriptTimeout property chỉ định khoảng thời gian tối đa một script có thể chạy trước khi nó được kết thúc. Khoảng thời gian này sẽ không ảnh hưởng trong khi đang xử lý một thành phần server. Cú pháp Server.ScriptTimeout = NumSeconds Các tham số NumSeconds Chỉ định số giây tối đa mà một script có thể chạy trước khi kết thúc nó. Giá trị mặc định là 90 giây. Ghi chú: Bạn không thể thiết lập giá trị nhỏ hơn giá trị chỉ định. Ví dụ: trong một số trường hợp, bạn muốn thi hành một đoạn script mà thời gian của nó dài hơn 90 giây mà không muốn chỉ một phần của đoạn script được hiển thị thì khi đó ta có thể sử dụng ScriptTimeout property để thực thi đoạn script đó. 17
- ScriptTimeOut Example ” Next %> III.7.2 CreateObject Phương thức CreateObject tạo một thực thể (instance) của một thành phần server để có thể sử dụng các phương thức và truy cập các property của thành phần đó. Cú pháp Server.CreateObject( progID ) Thamsố progID Chỉ định kiểu đối tượng cần tạo. Ví dụ: để xem một Web browser có hỗ trợ cookie, frames, tables ta sử dụng một trong các thành phần cung cấp cho ASP là thành phần Browser Capabilities. CreateObject Example ‘sử dụng các property Your browser has the properties: Cookies = Tables = Frames = Ghi chú: Mặc định, các đối tượng tạo bởi phương thức Server.CreateObject có page scope (phạm vi trang) nghĩa là server tự động hủy bỏ chúng khi server xử lý xong trang ASP hiện hành. Để tạo một đối tượng với phạm vi là session hay application, bạn có thể sử dụng thẻ và thiết lập thuộc tính SCOPE cho SESSION hoặc APPLICATION, hoặc là lưu trữ đối tượng trong biến session hoặc application. Tạo thành phần với Session scope (phạm vi session) Một đối tượng session-scope được tạo ra cho mỗi session mới trong một ứng dụng và được giải phóng khi session kết thúc. Do đó, có một đối tượng trên session hoạt động. 18
- Biến session có thể được sử dụng mà một user yêu cầu. Để tạo một đối tượng session scope, bạn có thểsử dụng thẻ trong tập tin Global.asa hoặc là sử dụng phương thức Server.CreateObject trên trang ASP. Ví dụ 1: sử dụng phương thức Server.CreateObject Ví dụ 2: sử dụng thẻ trong tập tin Global.asa Tạo thành phần với Application scope (phạm vi Application) Một đối tượng application-scope object là một thực thể đơn của một đối tượng được tạo ra khi ứng dụng bắt đầu. Đối tượng này được chia sẽ bởi tất cả các gien yêu cầu. Ví dụ 1: sử dụng phương thức Server.CreateObject Ví dụ 2: sử dụng thẻ trong tập tin Global.asa Bạn không thể tạo một thực thể (instance) có tên trùng với các đối tượng có sẵn. Ví dụ: III.7.3 HTMLEncode Phương thức HTMLEncode dùng để mã hóa một chuỗi thành dạng HTML. Cú pháp Server.HTMLEncode( string ) Tham số: String: Chuỗi để mã hóa. Ví dụ: HTMLEncode Example The bold tag " Response.Write “ ” Response.Write Server.HTMLEncode(" The bold tag ") %> kết quả hiển thị là: The bold tag <B>The bold tag </B> 19
- III.7 4 MapPath Phương thức MapPath ánh xạ một đường dẫn tương đối hoặc ảo tới một thư mục vật lí trên server Cú pháp Server.MapPath( Path ) Tham số Path Chỉ định đường dẫ n tương đối hoặc ảo ánh xạ thành một thư mục vật lý. Nếu Path bắt đầu với 1 forward (/) hoặc backward slash hay (\) thì phương thức MapPath trả về một đường dẫn nếu Path là một đường dẫn ảo đầy đủ. Nếu Path không bắt đầu với một slash (/ hoặc\ ), phương thức MapPath trả về một đường dẫn tương đối tới thư mục của tập tin .asp đang thực thi. Ví dụ: tập tin data.txt được định vị trong thư mục, C:\Inetpub\Wwwroot\Script, như là tập tin test.asp chứa đoạn script sau. Thư mục C:\Inetpub\Wwwroot thì được thiết lập như là thư mục chủ của server. Đoạn script sau sử dụng biến server là PATH_INFO để ánh xạ đường dẫn vật lý của tập tin hiện hành. kết quả là: C:\inetpub\wwwroot\script\test.asp Nếu không bắt đầu với ký tự slash (/ hoặc \) thì chúng được ánh xạ tương đối tới thư mục hiện hành, trong trường hợp này là C:\Inetpub\Wwwroot\Script. kết quả là: c:\inetpub\wwwroot\script\data.txt c:\inetpub\wwwroot\script\script\data.txt III.7.5 Mã hóa một chuỗi query Phương thức ULREncode mã hóa một chuỗi thành dạng URL. Ví dụ, tất cả các khoảng trắng được chuyển đổi thành dấu cộng. Cú pháp Server.URLEncode( string ) Các thamsố String Chuỗi để mã hóa. Ví dụ 1: ") %> khi đó kết quả mã hóa là: The+paragraph+tag%3A+%3CP%3E Ví dụ 2: khi đó kết quả mã hóa là: http%3A%2F%2Fwww%2Emicrosoft%2Ecom Ứng dụng cơ bản ASP gồm có một thư mục ảo trên server và tất cả tài liệu và tập tin mà nó ở trong thư mục ảo. 20
- Khi sử dụng những ứng dụng cơ bản của ASP bạn có thể sử dụng các loại đối tượng sau: Application state: tất cả thông tin gắn liền với một ứng dụng có thể được dùng cho tất cả những user của một ứng dụng. Session state: những thông tin thì chỉ có thể được dùng cho một user. III. 8. Đối tượng Session Đối tượng Session được sử dụng để lưu trữ và tìm lại thông tin về một user session. Các giá trị lưu trữ trong đối tượng Session không bị loại bỏ đi khi user di chuyển từ trang này sang trang khác trong ứng dụng, Web server tự động tạo ra một đối tượng Session khi một trang Web trong ứng dụng được yêu cầu bởi một user chưa có session. Server hủy bỏ đối tượng Session khi nó hết thời gian hay được hủy bỏ. Thực tế, một Session chỉ thuộc về một user. Dữ liệu Session thường gắn liền với một user, nó quản lý các thông tin về user đang sử dụng một ứng dụng. Cú pháp Session.collection|property|method Collections Contents Chứa các mục (item) mà bạn thêm vào session với các lệnh script. Properties SessionID Trả về định danh session đối với user. Timeout Khoảng thời gian đối với các session trong ud. Methods Abandon Hủy bỏ một đối tượng Session và giải phóng tài nguyên của nó. Events Se_OnStart Xảy ra khi người sử dụng đầu tiên yêu cầu một trang trong một chương trình ud Se_OnEnd Xảy ra khi session kết thúc III.8.1. Lưu trữ thông tin Session Nếu bạn cần lưu trữ dữ liệu trong đối tượng Session thì lưu trữ trong một collection của đối tượng Session. Thông tin lưu trữ trong đối tượng Session thì có giá trị thông qua session và có session scope. Ví dụ: lưu trữ dữ liệu trong 2 biến của đối tượng Session Session Example 21
- Để truy tìm lại thông tin từ đối tượng Session, truy cập tên biến. Ví dụ: hiển thị giá trị hiện hành của Session("Name") và Session("age") Session Example ” Response.Write Session("age") & “ ” %> Quản lý các session Bắt đầu và kết thúc Session Một Session có thể bắt đầu bằng 3 cách: User muốn yêu cầu một URL được định nghĩa trong tập tin.asp và tập tin Global.asa cho ứng dụng bao gồm cả thủ tục Session_OnStart User lưu trữ giá trị trong đối tượng Session User yêu cầu một tập tin asp trong một trình ứng dụng và tập tin Global.asa của ứng dụng sử dụng thẻ để khởi tạo một đối tượng với session scope. Một session tự động kết thúc nếu user không có yêu cầu hoặc refresh một trang trong một ứng dụng trong một khoảng thời gian. Giá trị này mặc định là 20 phút. Bạn có thể thay đổi giá trị mặc định cho một ứng dụng bằng cách thiết lập Session Timeout property. Ví dụ: đặt lại khoảng thời gian là 40 phút. Ngoài ra, bạn cũng có thể kết thúc một session với phương thức Abandon của đối tượng Session. Ví dụ: III. 8. 2. Nhận dạng một Session ASP gán mỗi user session một định danh duy nhất. Mỗi session có một định danh duy nhất được phát sinh bở i server khi session được tạo ra. Để tìm lại session ID, sử dụng SessionID property của đối tượng Session. Cú pháp Session.SessionID Ví dụ: SessionID Example 22
- Your session ID is: III.8.3. Timeout Timeout chỉ định khoảng thời gian đã gán đối tượng Session cho ứng dụng (tính bằng phút). Nếu người sử dụng không refresh (làm tươi) hoặc yêu cầu một trang trong một khoảng thời gian, session kết thúc. Cú pháp Session.Timeout [ = nMinutes] Tham số nMinutes Chỉ định số phút mà một session có thể vẫn còn trước khi server kết thúc nó một cách tự động, mặc định là 20 phút. Ví dụ: hiển thị Timeout property và đặt lại giá trị Timeout mới. Timeout Example Timeout= Your new time out is: Lưu ý: Bạn không thể đặt lại khoảng thời gian nhỏ hơn giá trị mặc định. III.8.4. Các sự kiện Session Đối tượng Session có 2 sự kiện: Session_OnEnd được kích khởi khi một session bắt đầu và Session_OnStart được kích khởi khi một session kết thúc. Cả 2 sự kiện này phải được định vị trong tập tin Global.asa. Nó chứa toàn bộ thông tin về ứng dụng Web site của bạn. Tập tin Global.asa có cấu trúc sau: Sub Session_OnEnd End Sub Sub Session_OnStart End Sub Tham số ScriptLanguage Chỉ định ngôn ngữ scripting sử dụng để viết các script sự kiện. Nó có thể là bất kỳ ngôn ngữ scripting được hỗ trợ như là VBScript hoặc JScript. Ghi chú: Bạn không thể sử dụng các thẻ HTML hoặc phương thức Response.Write bên trong tập tin Global.asa. Bạn không thể gọi phương thức MapPath trong đoạn script Session_OnEnd. 23
- Bạn nên chú ý rằng bất kỳ script sự kiện Session_OnStart nào theo sau là một lời gọi tới phương thức Redirect thì không được thực thi. Vì thế, bạn nên gọi phương thức Redirect sau cùng trong script sự kiện của bạn. Ví dụ như: Sub Session_OnStart ' đoạn script khởi tạo Session Response.Redirect "http:/server/app/StartHere.asp" End sub Tuy nhiên, bạn không thể lưu trữ một đối tượng có sẵn trong đối tượng Session. Ví dụ như: Bạn có thể sử dụng đối tượng session để thiết lập những đối tượng hoặc biến có session scope. Scope là sự mở rộng mà nó là 1 đối tượng thành phần hoặc biến có giá trịtrong ASP. Một biến mà có session scope thì nó chỉ có thể bên trong session đó. III.8.5. Đối tượng Application Đối tượng Application dùng để chia sẻ thông tin giữa tất cả người sử dụng của một ứng dụng. Một ứng dụng trên ASP được định nghĩa như toàn bộ các tập tin .asp trong một thư mục ảo và các thư mục con của nó. Một số đặc điểm của ứng dụng ASP: Dữ liệu có thể được chia sẻ giữa các trang trong ứng dụng. Một thực thể của một đối tượng có thể được chia sẻ giữa các trang trong ứng dụng. Dừng một ứng dụng mà không ảnh hưởng tới các ứng dụng khác. Cú pháp Application.method Collections Contents Chứa tất cả các mục đã được thêm vào đối tượng Application thông qua các lệnh script. Methods Lock Ngăn cấm các client khác sửa đổi đặc tính đối tượng Application. Unlock Cho phép các client khác sửa đổi đặc tính đối tượng Application. Events Application_OnEnd Xảy ra khi ứng dụng kết thúc (ví dụ khi ngừng web server). 24
- Application_OnStart Xảy ra khi một trang trong ứng dụng lần đầu được tham khảo đến. III.8.5.1. Sử dụng phương thức Lock vàUnlock Để ngăn cấm giá trị các biến lưu trữ trong đối tượng Application có thể bị hư khi có 2 client cố gắng truy cập dữ liệu cùng một lúc thì chúng ta có thể sử dụng phương thức Lock và Unlock. Khi phương thức đang Lock diễn tiến thì không có các đoạn script khác cố gắng thay đổi thông tin lưu trữ trong đối tượng Application cho đến khi phương thức Unlock được gọi. Cú pháp Application.Lock Application.Unlock Ví dụ: sử dụng biến ứng dụng NumVisits để lưu trữ số lần một trang cụ thể đã được truy cập. Phương thức Lock được gọi để chỉ có client hiện hành có thể truy cập hoặc thay đổi NumVisits. Sau đó gọi phương thức Unlock cho phép những người sử dụng khác truy cập đối tượng Application. This application page has been visited times! III.8.5.2. Các sự kiện Application Giống như đối tượng Session, đối tượng Application cù ng có 2 sự kiện: Sự kiện Application_OnStart xảy ra khi một ứng dụng ASP bắt đầu và trước sự kiện Session_OnStart, sự kiện Application_OnEnd xảy ra khi ứng dụng kết thúc và sau sự kiện Session_OnEnd. Cú pháp Sub Application_OnEnd End Sub Sub Application_OnStart End Sub Tham số ScriptLanguage Chỉ định ngôn ngữ scripting sử dụng đểviết các script sự kiện. Nó có thể là bất kỳ ngôn ngữ scripting được hỗ trợ như là VBScript hoặc JScript. Ghi chú Bạn không thể gọi phương thức MapPath trong đoạn script Application_OnEnd. 25
- Ví dụ: hiển thị thông tin cho mỗi user của ứng dụng xem khi vào ứng dụng bằng cách sử dụng sự kiện Application_OnStart, sau đó cho phép người sử dụng sửa đổi lại thông tin. Sub Application _OnStart Application (“yourname” )= “Unknow” Application (“occuption” )= “Unknow” End Sub Display.asp ‘hiển thị thông tin để user truy cập tập tin Display.asp có thể xem Thank you, You are Change.asp ‘ thay đổi giá trị mới và nhấn Send để thay đổi Please enter your name: Please choose your occupation: Studen Teacher Engineer Result.asp ‘đặt lại giá trị nhận được từ user trong tập tin Change.asp và chuyển hướng kết nối user tới tập tin Display.asp để xem giá trị mới. <% If Not IsEmpty(Request.Form(“ newmsg” )) then Application.Lock Application(“yourname”) = Request. QueryString(“name”) Application(“your_occup”) = Request. QueryString(“occup” ) Application.UnLock 26
- End If Response.Redirect “Display.asp” %> Bạn không thể lưu trữ một đối tượng có sẵn trong đối tượng Application. Ví dụ như: VI. CÁC THÀNH PHẦN (COMPONENT) CỦA ASP Ngoài các đối tượng cơ bản có sẵn trong môi trường ASP, ASP việc tạo các trang Web động bằng ASP còn được trợ giúp nhờ một số thư viện các đối tượng (Active X Component) của ActiveX Server. Các thành phần được thiết kế để chạy trên Web Server như một ứng dụng Web cơ sở hợp thành các gói nhỏ đặc trưng chung là động. Mỗi thành phần được sử dụng cho một công việc chuyên biệt nhiệm cho là một thư viện các lớp (hay đối tượng), được thiết kế ở dạng Automation Server, thực hiện một nhóm công việc chung nhất cho một thao tác nào đó, chẳng hạn như truy xuất database, truy xuất file vì thế người phát triển ứng dụng Web bằng ASP khộng cần phải tạo lại các đặc tính này. Bạn có thể tạo động, tương tác với các trang Web bằng cách sử dụng các thành phần server đã được included với Active Server Pages (ASP) trong các đoạn script của bạn. Thành phần File Access VI.1. Đối tượng FileSystemObject Thành phần File Access sử dụng đối tượng FileSystemObject và TextStream để khôi phục lại và sửa đổi thông tin lưu trữ trong file trên server. Đối tượng FileSystemObject cung cấp thao tác các tập tin văn bản từ bên trong đoạn mã của chúng ta. Chúng ta có thể tạo một thực thể của đối tượng FileSystemObject bằng cách sử dụng đoạn script sau: Set objFSO=CreateObject(“Scripting.FileSystemObject”) Mỗi khi chúng ta có một đối tượng FileSystemObject, chúng ta tạo đối tượng TextStream bằng cách sử dụng các phương thức của FileSystemObject VI 1.1 Phương thức CreateTextFile Phương thức CreateTextFile tạo một file văn bản mới hoặc viết đè lên một file đã tồn tại. Phương thức này trả về một đối tượng TextStream mà chúng ta có thể sử dụng để 27
- đọc file hoặc ghi vào file. Trước tiên chúng ta tạo một đối tượng FileSystemObject, sau đó sử dụng đối tượng này để tạo đối tượng TextStream. Cú pháp: [object. ]CreateTextFile(filename[, overwrite]) Các tham số: Object Tên của một đối tượng FileSystemObject Filename Đường dẫn và tên file chúng ta tạo ra hoặc ghi lên Overwrite TRUE ghi đè lên một file đã tồn tại, ngược lại là FALSE Ví dụ: tạo một file mới và ghi dữ liệu vào file.txt VI.1.2. Phương thức OpenTextFile: Phương thức OpenTextFile mở một file văn bản đã tồn tại. Phương thức này trả về một đối tượng TextStream mà chúng ta có thể sử dụng để đọc file hoặc thêm dữ liệu vào file. Trước tiên, chúng ta tạo một đối tượng FileSystemObject sau đó sử dụng đối tượng này để tạo đối tượng TextStream. Set objFSO=CreateObject(“Scripting.FileSystemObject”) Set objNewFile=obj.OpenTextFile (“C:\TextFile\Myfile.txt”) Cú pháp: [object. ]OpenTextFile (filename[, iomode[, create]]) Các tham số: Object Tên của một đối tượng FileSystemObject. Filename Đường dẫn và tên tập tin muốn mở. Iomode ForReading hoặc ForAppending. Mặc định là ForReading. Create TRUE tạo một file mới hoặc là FALSE nếu file đã tồn tại rồi. Ví dụ1: đọc một file sử dụng phương thức ReadLine ReadingFile.asp <% Set objFSO=Server.CreateObject(“Scripting.FileSystemObject”) Set objTextFile=obj.OpenTextFile(“C:\MyFile\file. txt”, 1, FALSE ) 28
- WHILE NOT objTextFile.atEndOfStream Response.Write objTextFile.ReadLine(“Hello”) WEND objTextFile.Close %> Ví dụ 2: thêm dữ liệu vào file.txt ReadingFile.asp VI. 2 Đối tượng TextStream Sử dụng các phương thức và property của đối tượng TextStream để đọc hay ghi dữ liệu vào file. Phương thức Close Đóng một file. Read(numchars) Đọc numchars ký tự từ file. ReadAll Đọc toàn bộ nội dung của file TextStream. ReadLine Đọc một dòng từ file. Skip(numchars) Nhảy qua numchars ký tự khi đọc file. SkipLine Nhảy qua dòng kế tiếp khi đọc file. Write(string) Ghi chuỗi lên file. WriteLine([string]) Ghi chuỗi và thêm ký tự xuống hàng lên file. WriteBlankLine(n) Ghi n dòng lên file. Properties AtEndOfLine TRUE nếu con trỏ file ở cuối dòng trong một file. AtEndOfStream TRUE nếu con trỏ file ở cuối file. 29
- Column Trả về số cột hiện hành trong một file, bắt đầu từ 1. Line Trả về số dòng hiện hành trong một file, bắt đầu từ 1. Ví dụ 1: sử dụng FileSystemObject để ghi dữ liệu vào file Ví dụ 2: sử dụng FileSystemObject để đọc file VI. 3. Thành phần Ad Rotator Thành phần Ad Rotator tạo một đối tượng tự động quay các hình ảnh quảng cáo trên một trang Web. Mỗi khi một user mở hoặc nạp lại trang Web, thành phần Ad Rotator hiển thị một thông báo mới dựa trên thông tin bạn chỉ định trong Rotator Schedule File Cú pháp: Set AdRotator = Server.CreateObject("MSWC.adRotator") với AdRotator là tên của đối tượng AdRotator. Properties Border Chỉ định kích thước đường viền của quảng cáo banner. Clickable Cho biết quảng cáo banner có chức năng là một siêu liên kết. Nó có 2 giá trị là TRUE và FALSE. TargetFrame Chỉ định tên của frame để hiển thị thông báo trong đó. Methods GetAdvertisement Lấy chi tiết thông tin về quảng cáo banner. Để tạo một thực thể của thành phần Ad Rotator, chúng ta sử dụng phương thức CreateObject của đối tượng Server. Ví dụ: Hiển thị các thông báo khác nhau mỗi khi user xem trang Web, trong đó tập tin MyAdFile.txt chứa thông tin về các quảng cáo được hiển thị. 30
- Adrotator Example objAd.Border(0) ‘không có đường viền objAd.Clickable(TRUE) ‘là một siêu liên kết objAd.TargetFrame(“MyFrame”) ‘nạp vào frame tên MyFrame strHTML=objAd.GetAdvertisement(“AdFiles\MyAdFile.txt”) Response.Write(strHTML) ‘đưa HTML vào trong trang %> VI. 4. Thành phần Browser Capabilities Xác định khả năng, loại, kiểu của mỗi browser như tên, version, có hỗ trợ frame, table hay không ) Khi một browser kết nối tới web server, nó tự động gởi tiêu đề User Agent HTTP. Tiêu đề này là một chuỗi ASCII định dạng browser và version của nó. Bạn có thể thêm các property hoặc định nghĩa browser mới bằng cách cập nhật file browscap.ini. Cú pháp Set BrowserType = Server.CreateObject("MSWC.BrowserType") với BrowserType là tên đối tượng BrowserType. Ví dụ: sử dụng đối tượng BrowserType hiển thị một bảng cho biết các khả năng của browser hiện hành Browser Example Browser Version Frames TRUE FALSE Tables TRUE FALSE 31
- BackgroundSounds TRUE FALSE VBScript TRUE FALSE JScript TRUE FALSE VI. 5. Thành phần Content Linking Tạo nội dung của trang và liên kết chúng với nhau giống như những trang trong một quyển sách. Thành phần Content Linking tạo Nextlink quản lý danh sách các URL, nó có thể phát sinh và cập nhật bảng nội dung và điều khiển liên kết tới các trang trước đó và các trang sau đó. Cú pháp Set NextLink = Server.CreateObject("MSWC.NextLink") với NextLink là tên của đối tượng được tạo bởi phương thức Server.CreateObject. Các phương thức GetListCount(list) Trả về tổng số trang chứa trong list file. GetNextURL(list) Lấy URL của trang kế tiếp trong list file. GetPreviousDescription(list) Lấy dòng mô tả của trang trước đó trong list file. GetListIndex(list) Lấy vị trí của trang hiện hành trong list file. GetNthDescription(list, n) Mô tả trang thứ N trong list file GetPreviousURL(list) Lấy URL của trang trước đó trong list file. GetNextDescription(list) Lấy mô tả của trang kế tiếp trong list file. GetNthURL(list, n) Lấy URL của trang thứ Nth trong list file. VI.5.1. Tạo nội dung của một trang Xây dựng bảng nội dung trong trang: 32
- 1) Then %> ’ ; "> ’ ; "> If ( intThisPage ” Onclick=“location.href=’ ’; "> Thành phần Database Access Ta có thể tạo những trang Web động tác động lẫn nhau bằng cách sử dụng các thành phần Server sau trong Script Một ứng dụng Web Database viết bằng cách sử dụng thành phần Database Access của ActiveX hay còn gọi là thư viện ADO (ActiveX Data Object). Đây cũng chính là một điểm mạnh nhất của ASP trong việc phát triển ứng dụng Web Database. Các đối tượng của ADO cung cấp cơ chế tạo ra các kết nối (Connection) với hầu hết các kiểu Database, cũng như việc truy xuất, cập nhật các Database này. Hiện nay thư viện ADO là một công cụ mạnh nhất trong việc phát triển các ứng dụng Database trên Internet. Trong phần này ta sẽ xem xét các phần trong thư viện công cụ này. Giao diện ADO: ADO được thiết kế một cách đơn giản nhất, nó giao tiếp với database thông qua phương thức ODBC (Open Database Connectivity), chúng ta có thể sử dụng chúng với bất kỳ loại Database nào nếu như ODBC có driver hỗ trợ. (Hiện nay tồn tại Driver cho hầu hết các loại Database, như Foxpro, Access, oracle, Spl server tuy nhiên các file cơ sở dữ liệu theo dạng bảng như Exel, hoặc File text thì ODBC không hỗ trợ). 33
- Các đối tượng trong ADO Các đối tượng chính trong ADO đó là: Connection, Commmand và RecordSet. Ngoài ba đối tượng chính này còn có các đối tượng con của nó cùng với các tham số, property, phương thức bên trong. Sử dụng Connection ta có thể thiết lập sự liên kết với cơ sở dữ liệu, thông qua đó ta có thể thực hiện các query để lấy ra các record hoặc cập nhật một record bằng sử dụng đối tượng Command. Kết quả thực hiện các query trên database sẽ được lưu vào đối tượng RecordSet, trên đối tượng này ta có thể duyệt và lấy ra một hay nhiều Record. 1. Đối tượng Connection Để sử dụng đối tượng Connection, trước tiên ta phải tạo ra một thực thể (instance) cho nó, đây thực sự là thực thể của đối tượng này trong trang ASP. Để tạo một thực thể (instance) đối tượng Connection bạn có thể sử dụng đoạn script sau: Thông thường trong một ứng dụng nếu ta cần có một liên kết với Data Source cố định cho tất cả trang thì khi đó ta sẽ đặt thực thể (instance) của Connection ở mức application scope bằng cách đưa phát biểu tạo thực thể (instance) ở trên vào sự kiện Application_OnStart: hoặc thiết lập tầm vực cho Connection ở mức Sesstion như sau: Tuy nhiên ta có thể xem xét thêm việc tối ưu cho các Connection trong một ứng dụng có nhiều người sử dụng truy xuất tới Database, đó là khả năng Connection Pooling của ODBC 3.0. Connection Pooling. Các ứng dụng cơ sở ứng dụng truyền thống đều tạo một nối liên kết đơn tới Database mà nó sử dụng, còn các ứng dụng Database trên Web lại mở và đóng các liên kết này ở mỗi một trang Web. Một phương pháp cho các ứng dụng Database trên Web là tạo một sự liên kết liên tục với cơ sở dữ liệu của từng người sử dụng và lưu trữ trong đối tượng Session. Tuy nhiên phương pháp này có thể làm gia tăng số lượng các user có kết nối với cơ sở dữ liệu mà không làm việc và nó chỉ đạt được độ tin cậy đối với các Website có sự lưu thông dữ liệu thấp (low-trafic) 34
- Phương pháp tiện lợi trong việc quản lý các kết nối với cơ sở dữ liệu của ứng dụng Web là quản lý bằng Connection Pool của ODBC 3.0, nhằm giảm bớt số lượng liên kết rảnh rỗi, ODBC sẽ mở các kết nối và quản lý các kết nối này. Mỗi khi có một yêu cầu mới thì thực hiện việc kiểm tra xem có liên kết nào trong Connection Pool đang rảnh không, nếu không có thì sẽ tạo kết nối mới, nếu có thì nó sẽ lấy liên kết rảnh này mà không tạo liên kết mới. Nếu một liên kết rảnh nào trong Connection Pool tồn tại quá 60 giây thì nó sẽ tự động loại bỏ. Connection Pooling được kích hoạt mặc nhiên trong ASP, ta có thể loại bỏ bằng cách thiết lập giá trị Register Entry Start Connection Pool về giá trị 0. Các phương thức và đặc tính (property) của đối tượng Connection Phương thức Môtả Open Mở một kết nối mới tới dữ liệu nguồn. Close Đóng lại một kết nối. Execute Thực thi một query, SQL hoặc một thủ tục lưu trữ sẵn. Property Môtả CommandTimeout Số giây chờ đợi khi thực thi một lệnh trước khi kết thúc. ConnectionString Thông tin dùng để tạo kết nối tới nguồn dữ liệu. ConnectionTimeout Số giây chờ đợi khi tạo ra một kết nối trước khi kết thúc. 1. 1 Mở và đóng một kết nối Database Để thiết lập một liên nối với database thì bạn tạo thực thể (instance) của đối tượng Connection, sau đó ta có thể mở một kết nối tới dữ liệu nguồn (DSN) để có thể truy xuất dữ liệu. Cú pháp: Connection.Open ConnectionString, User, Password Trong đó ConnectionString: Chuỗi định nghĩ a tên của Data Source Name (DSN), tên này được khai báo trong ODBC. User: Tên người sử dụng đưa vào khi mở một kết nối Password: Mật mã đưa vào khi thiết lập một kết nối. Ví dụ: mở một DSN có tên là student, user="student" và password ="magic" 35
- Sau khi xử lý xong dữ liệu trên data source, trước khi kết thúc trang ta phải đóng lại các kết nối đã mở. Sử dụng phương thức Close của đối tượng Connection để đóng một kết nối: objConn.Close Sau khi đóng một kết nối, bạn không thể sử dụng kết nối để giao tiếp với database. 1.2 Thực thi câu lệnh SQL với kết nối Open: Sau khi đã kết nối với Data Source, để thực thi một câu lệnh SQL hoặc với một thủ tục, sử dụng phương thức Execute cho phép thực thi một câu lệnh tác động lên Data Source. Phương thức này có 2 dạng: Một dạng được sử dụng khi tìm kiếm kết quả từ một database và dạng khác là được sử dụng khi không có kết quả nào được trả về. Set recordset = connection.Execute(CommandText, RecordsAffected, Options) connection.Execute CommandText, RecordsAffected, Options Trong đó Recordset: Một biến đối tượng Recordset chứa kết quả truy vấn. CommandText: Chứa query để thực thi. Connection: Một biến đối tượng Connection. RecordsAffected: chứa số record mà lệnh tác động đến. Options: Có các giá trị khác nhau tương ứng với mỗi loại CommandText. Giá trị Hằng tương ứng Mô tả CommandText 0 AdCmdUnknown Unknown. Giá trị này là mặc định khi định nghĩa. 1 AdCmdText CommandText là một câu lệnh như câu lệnh SQL. 2 AdCmdTable Tên của bảng tạo recordset. 3 AdCmdStoredProc Một thủ tục trữ sẵn (stored procedure) trong data source. Trước khi bạn có thể sử dụng những hằng số này trong một trang ASP, bạn phải include một file đặc biệt gọi là ADOVBS.inc. Ví dụ 1: sử dụng phương thức Execute để thực thi một câu lệnh SQL mà không tìm kiếm lại bất kỳ kết quả nào. SQL 36
- Ví dụ 2: sử dụng phương thức Execute để trả kết quả từ một câu truy vấn 2. Đối tượng Command. Thay vì phải sử dụng phương thức Execute của đối tượng Connection để thực thi một thủ tục lưu trữ sẵn hoặc một câu lệnh SQL, ta có thể sử dụng đối tượng Command để thi hành các thao tác với cơ sở dữ liệu như: thêm, xóa, cập nhật dữ liệu hoặc truy vấn dữ liệu trong một bảng. Chú ý: Để thực thi một truy vấn không sử dụng đối tượng Command, đưa một chuỗi truy vấn vào phương thức Execute của đối tượng Connection hoặc là tới phương thức Open của đối tượng Recordset. Tuy nhiên, đối tượng Command cần được sử dụng khi bạn muốn vẫn giữ lại lệnh và thực thi lại nó, hoặc sử dụng các tham số truy vấn. Việc tạo một thực thể (instance) cho đối tượng Command cũng giống như đối tượng Connection tức là ta cũng sử dụng phương thức Server.CreateObject. Ví dụ: Set objCmd = Server.CreateObject (“ADODB.Command”) Tuy nhiên để thực sự sử dụng biến đối tượng này ta phải xem xét các đặc tính và phương thức đi kèm theo nó. Phương thức Mô tả CreateParameter Tạo một đối tượng Parameter trong Parameters collection. Execute Thực thi câu lệnh SQL hoặc thủ tục lưu trữ sẵn chỉ định trong CommandText property. Property Mô tả ActiveConnection Đối tượng Connection nào được sử dụng với đối tượng Command. CommandText Chỉ định câu lệnh cần thực thi. CommandTimeout Xác định thời gian thực thi lệnh, giá trị thời gian này tính theo CommandType Choiâ biết kiểu của query chỉ định trong CommandText. Prepared Tạo ra lệnh chuẩn bị trước khi thực thi. 37
- 2.1 Tạo một kết nối Active Connection: Sau khi đã có thực thể (instance) của đối tượng Connection đã được kết nối với cơ sở dữ liệu và đối tượng Command. Lúc này nếu muốn sử dụng đối tượng Command ta phải gán tên của Connection thích hợp (Connection nào kết nối tới cơ sở dữ liệu cần làm việc) vào cho ActiveConnecttion của đối tượng Command. Cú pháp name.activeConnection = Connection_name Ví dụ: Sau khi đã thiết lập kết nối với đối tượng Connection, ta có thể sử dụng phương thức Exexcute của đối tượng Command gần giống như với Connection. Tuy nhiên, điểm khác với đối tượng Connection là đối với đối tượng Command nếu ta có dự định thi hành một lệnh nào thì ta sẽ phải khởi tạo các giá trị cho CommandText, CommandType, . Ví dụ: đoạn chương trình thi hành một câu query trên một data source Chúng ta có thể thiết lập giá trị CommandTimeout đầu tiên để xác định khoảng thời gian thực thi câu lệnh, mặc định là 30 giây, nếu để giá trị này là 0 thì ADO sẽ thực thi cho đến khi tác vụ được hoàn tất. 2.2 Sử dụng tham số cho các lệnh SQL. 38
- Nếu như query cần thực hiện có yêu cầu các tham số, thì ta phải thêm các tham số này vào Parameter collection trước khi thực hiện câu lệnh. Đối với phương thức Execute của đối tượng Connection không có khả năng này. Sử dụng phương thức Execute của đối tượng Command thực thi câu query chỉ định trong CommandText property. Cú pháp Set recordset = command. Execute(RecordsAffected, Parameters, Options) command.Execute RecordsAffected, Parameters, Options Trong đó recordset: Một biến đối tượng Recordset chứa kết quả truy vấn. command: Một biến đối tượng đại diện cho đối tượng Command. RecordAffected và Options có chức năng và giá trị giống như trong đối tượng Connection. Parameter là một dãy các giá trị tham số được đưa vào với một câu lệnh SQL. Để tìm hiểu cách tạo ra danh sách các tham số của câu lệnh, ta hãy xem xét các phương thức và property của Parameter collection. Phương thức Mô tả Append Thêm một tham số vào collection. Delete Xoá một tham số trong collection. Refresh Cập nhật collection để phản ánh sự thay đổ i các tham Property Mô tả Count Trả về số tham số trong collection. Item Lấy lại giá trị của một tham số trong collection. Tạo và thêm tham số vào Collection Mỗi một phần tử của Parameter collection có thể coi như một đối tượng Parameter và chúng cũng có các đặc tính (property) riêng của mình. Property Mô tả Attributes Kiểu dữ liệu mà tham số chấp nhận. Direction Thể hiện kiểu dữ liệu mà tham số là Input hay Output, hay là cả hai, hay nó là giá trị trả về từ một thủ tục lưu trữ sẵn (stored procedure). Name Tên của tham số. NumericScale Số chữ số thập phân trong tham số kiểu số. Precision Số chữ số của tham số kiểu số. Size Kích thước lớn nhất, tính theo byte, của giá trị tham số. Type Kiểu dữ liệu của tham số. Value Giá trị gán cho tham số. 39
- Để tạo một đối tượng Parameter mới, sử dụng phương thức CreateParameter của đối tượng Command Cú pháp Set pamareter = command.CreateParameter(Name, Type, Direction, Size, Value) Để thêm một tham số mới vào Parameter collection. Trước tiên ta phải tạo một thực thể (instance) cho đối tượng Parameter, sau đó thiết lập các giá trị property cho nó và cuối cùng sử dụng phương thức Append. Ví dụ: tạo một tham số mới và thêm tham số này vào Parameter collection. Set objParam = objCmd.CreateParameter ( “State”, 128, 1, 2, ”Ny” ) objCmd.Parameters.append objParam Ví dụ: Tham khảo các đối tượng collection 40
- Mỗi khi chúng ta có các tham số trong collection. Để lấy giá trị của tham số trong collection ta có thể sử dụng Item property hoặc sử dụng chỉ mục (index) hoặc là tên tham số. Cú pháp objCmd.Parameters.Item(index) hoặc objCmd.Parameters(index) hoặc objCmd.Parameters. Item(tên_tham_số) hoặc là objCmd.Parameters(tên_tham_số) Ví dụ: để lấy giá trị của tham số State và 128 ở ví dụ trên, ta có thể sử dụng các Cú pháp objCmd.Parameters.Item(0) hoặc objCmd.Parameters(0) hoặc objCmd.Parameters.Item(“State”) hoặc là objCmd.Parameters(“State”) tương tự objCmd.Parameters.Item(1) hoặc objCmd.Parameters(1) hoặc objCmd.Parameters.Item(128) hoặc là objCmd.Parameters(128) Đọc và hủy bỏ các tham số Chúng ta có thể sử dụng vòng lặp For Each để xuất ra tên và giá trị của tất cả các tham sốtrong Parameter collection và đặt chúng trong trang hiện hành sử dụng phương thức Response.Write Ví dụ: ” Response.Write “Parameter value = ” & objParam.Value Next %> Để hủy bỏ một tham số trong Parameter collection, sử dụng phương thức Delete. Ví dụ: xoá tham số tên State, chúng ta có thể sử dụng tên hoặc chỉ mục của nó objCmd.Parameters.Delete “State” objCmd.Parameters.Delete 0 3. Đối tượng Recordset. Bằng cách sử dụng các đối tượng Connection và Command ta có thể thực thi các query để thêm vào, cập nhật hay xóa một record trong data source. Tuy nhiên trong các ứng dụng thì ta cũng phải thực hiện việc lấy ra một số các record từ ADO, để hiển thị giá trị của chúng ta phải sử dụng đối tượng Recordset. Sử dụng Recordset để hiển thị các record Một Recordset có thể được sử dụng để tượng trưng cho các record trong một bảng database. Nó có thể chứa một hoặc nhiều record (hàng), mỗi record có thể chứa một 41
- hoặc nhiều field (cột). Để tạo một thực thể (instance) của đối tượng Recordset, sử dụng phương thức Server.CreateObject: Set objRs = Server.CreateObject("ADODB.Recordset") Sau khi đã có biến đối tượng Recordset, ta có thể khởi tạo giá trị cho nó bằng cách lưu kết quả trả về mỗi khi thực thi phương thức Execute của đối tượng Connection hay Command. Để hiển thị các record trong Recordset, sử dụng vòng lặp thông qua các record. Ví dụ: ” objRs.MoveNext Loop Set objRs.Close Set objConn.Close %> Làm việc với Fields Collection. Mỗi đối tượng Recordset có một Fields collection chứa dữ liệu và thông tin về mỗi trường (field) trong record hiện hành. Sử dụng Fields collection để lấy mỗi record trong Recordset. Phương thức Mô tả Refresh Cập nhật collection để phản ánh sự thay đổi tới giá trị các field. Property Mô tả Count Trả về số field trong collection. Item Lấy lại nội dung của các field trong collection. Để hiển thị giá trị của cột trong bảng, bạn có thể sử dụng tên của trường (cột) hoặc khi bạn không biết tên của trường (cột) thì ta có thể sử dụng chỉ mục của trường đó để hiển thị. Chú ý: chỉ số của cácfiled trong record được đánh số từ 0 cho tới giá trị objRs.Fields.Count-1. 42
- Ví dụ: hiển thị tất cả các hàng và cột trong một bảng Dislay Database Example ‘hiển thị tên của các field ‘hiển thị tất cả các field trong Recordset Các kiểu con trỏ (Cursor) và khóa (Locking) Recordset 43
- Một cursor xác định kiểu thao tác có thể thực hiện và kiểu thay đổi mà các user khác khi mở một Recordset. Còn kiểu locking xác định database sẽ xử lý trường hợp nhiều user cố gắng thay đổi một record trong cùng một lúc. Để thực hiện việc này, đầu tiên bạn tạo một thực thể (instance) của đối tượng Recordset, sau đó sử dụng phương thức Open để mở một Recordset. Cú pháp objRs.Open Source, ActiveConnection, CursorType, LockType, Options với các tham số: Source: Một đối tượng Command, câu lệnh SQL, tên bảng hoặc thủ tục lưu trữ sẵn (stored procedure). ActiveConnection: Tên của dt Connection đã được mở kết nối với cơ sở dữ liệu cần làmviệc. CursorType: Kiểu của con trỏ được sử dụng khi mở Recordset. CursorType sử dụng các kiểu cursor khi mở Recordset là: AdOpenForwardOnly: (Mặc định)Với tham số này bạn chỉ có thể duyệt các record trong Recordset theo một chiều từ đầu đến cuối. AdOpenKeyset: Recordset được mở có khả năng cho phép ta cập nhập các record (xóa, thay đổi). Tuy nhiên, nếu user khác thêm một record mới, record này sẽ không xuất hiện trong Recordset. AdOpenDynamic: Có thể duyệt theo tất cả các chiều (lên, xuống) trong Recordset. Phản ánh tất cả những thay đổi (thêm vào, sửa đổi, loại bỏ) record trong Recordset do user thực hiện. AdOpenStatic: Bạn có thể duyệt theo tất cả các chiều (lên, xuống) trong Recordset. Không phản ánh tất cả những thay đổi record trong Recordset do user thực hiện. LockType: Kiểu locking sử dụng khi mở Recordset. LockType sử dụng các kiểu locking khi mở Recordset là: adLockReadOnly: Mặc định. Không thể thay đổi các record trong Recordset. adLockOptimistic: Một record chỉ bị lock (khóa) ngay sau khi thay đổi dữ liệu trên Recordset trên data source. adLockPessimistic: Một record chỉ bị lock (khóa) khi bạn gọi phương thức Update của Recordset. adLockBatchOptimistic: Các record sẽ được cập nhật theo bó (batch update). Options: Kiểu của query hoặc bảng đại diện bởi Source. Ví dụ: Cursor and Locking Example 44
- Sửa đổi các record trong Recordset Bạn có thể sử dụng một số phương thức của Recordset để sửa đổi các record trong một Recordset. Phương thức Mô tả AddNew Thêm một record mới vào Recordset. Close Đóng lại đối tượng Recordset và các đối tượng con của nó. Delete Xoá record hiện hành trong Recordset. Requery Thực hiện lại query. Update Lưu các thay đổi trên record hiện hành. Ví dụ: sử dụng phương thức AddNew để thêm một record vào Recordset AddNew Database Example <% Set objConn = Server.CreateObject(“ADODB.Connection”) Set objRs = Server.CreateObject(“ADODB.Recordset”) objConn.Open "DSN=student;uid=student;pwd=magic" MySql=(“Select Name From MyTable”) objRs.Open Mysql, objConn, adOpenForwardOnly, adLockReadOnly, adCmdText objRs.addNew(“Name”)=“David” objRs.Update objRs.close set objRs=nothing 45
- objConn.close set objConn=nothing %> Duyệt các record trên Recordset. Đối tượng Recordset bao gồm một số phương thức để dịch chuyển qua các record trong một Recordset, record mà nó dịch chuyển tới là record hiện hành. Khi mở một Recordset thì kiểu CursorType mặc định là adOpenForwardOnly nghĩa là chúng ta chỉ có thể dịch chuyển về phía trước, còn nếu muốn dịch chuyển quanh một Recordset thì ta cần mở Recordset với kiểu CursorType là adOpenStatic (hoặc adOpenDynamic, adOpenKeyset). Move: Dịch chuyển vị trí của record hiện hành. MoveFirst: Dịch chuyển về record đầu tiên. MoveLast: Dịch chuyển về record cuối cùng. MoveNext: Dịch chuyển về record kế tiếp. MovePrevious: Dịch chuyển về record trước đó. Khi ta đã có một Recordset, để hiển thị truy xuất tới mỗi Recordset trong đó ta có thể sử dụng các phương thức duyệt như: MoveFirst, MoveLast, MoveNext, MovePrevious sẽ õ lấy được nội dung của record đầu tiên, cuối cùng, kế tiếp hay record phía trước. Khi sử dụng các phương thức để dịch chuyển các vị trí không xác định. Nếu record hiện hành là record là record cuối cùng trong Recordset thì khi gọi phương thức MoveNext thì sẽ gây ra lỗi. Để tránh trường hợp này thì ta sử dụng các property của Recordset như BOF, EOF để xác định record hiện hành là đầu tiên hay là cuối cùng. Các property này có ý nghĩa như sau: BOF property có giá trị TRUE nghĩa là con trỏ đang ở vị trí đầu Recordset, khi Recordset mới được mở thì BOF luôn có giá trị này. EOF property có giá trị TRUE nghĩa là con trỏ đang ở vị trí cuối cùng của Recordset. Nếu không có record nào trong Recordset thì cả BOF lẫn EOF đều là TRUE. Ví dụ: sử dụng một vòng lặp và phương thức MoveNext để duyệt các record trong Recordset. AddNew Database Example <% Set objConn = Server.CreateObject(“ADODB.Connection”) Set objRs = Server.CreateObject(“ADODB.Recordset”) objConn.Open "DSN=student;uid=student;pwd=magic" MySql=(“Select Name From MyTable”) objRs.Open Mysql, objConn, adOpenDynamic, adCmdText 46
- objRs.MoveLast Do While Not objRs.BOF Response.Write “ ” & objRs(“Name”) objRs.MovePrevious Loop objRs.Close set objRs=Nothing objConn.Close set objConn=Nothing %> Lưu ý: BOF và EOF có các điểm sau: Nếu Recordset không chứa record nào khi bạn mở nó cả BOF và EOF là TRUE. Khi BOF và EOF là TRUE, thuộc tính vẫn còn là TRUE cho đến khi bạn di chuyển tới một record đang tồn tại, ở thời điểm này giá trị BOF hay EOF sẽ trở thành FALSE. Khi BOF hay EOF là FALSE và record duy nhất trong recordset bị xóa, thuộc tính vẫn giữ FALSE cho tới khi bạn cố di chuyển tới 1 record khác, ở thời điểm này cả BOF và EOF trở thành TRUE. Vào lúc bạn tạo hay mở một Recordset có chứa ít nhất một record, record đầu tiên là record hiện hành và cả BOF và EOF là FALSE. 47