Sử dụng MFC để truy xuất database

Một phần của tài liệu THIẾT KẾ VÀ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ QUẢNG CÁO TRÊN TRANG WEB.doc (Trang 34)

III. Sử dụng ISAPI Extension để truy xuất database

2.Sử dụng MFC để truy xuất database

Microsoft Foundation Classes (MFC) cho phép người phát triển chương trình tạo ra ứng dụng trên Windows mà khơng cần phải biết cấu trúc bên dưới của Windows. Microsoft đã phát triển MFC cho ODBC API. Những class này thể hiện phương pháp tiếp cận hướng đối tượng sử dụng ODBC API. Những class MFC cho OBDC API làm cho việc lập trình dễ dàng hơn, việc liên kết tới MFC làm cho ứng dụng được mở rộng.

Class ODBC của MFC : CDatabase và CRecorset

Recordset : là một khối dữ liệu, tập hợp của nhiều hàng trong một bảng (recordset cịn được gọi là rowset). Cĩ hai loại recordset: snapshots và dynasets. Cả hai đều được class CRecordset hỗ trợ. Mỗi loại cĩ tính chất chung của recordsets, nhưng cũng cĩ những tính chất mở rộng.

Snapshots : cung cấp dữ liệu tĩnh (rowset tĩnh), cĩ ích cho những bản báo cáo hay những tình huống khi ta muốn xem dữ liệu tại một thời điểm xác định nào đĩ.

Dynasets : rowset động. Cĩ ích khi ta muốn việc cập nhật dữ liệu được thực hiện bởi người khác, để cĩ thể nhìn thấy dữ liệu trong recordset mà khơng phải query lại hay làm tươi recordset.

Hai class ODBC chính của MFC là CDatabase và CRecorset. Đối tượng của class CDatabase tiêu biểu cho những kết nối với data source, và đối tượng của CRecordset tiêu biểu cho những recordset (rowset). Ta ít khi sử dụng class được derive từ CDatabase nhưng thường xuyên derive class từ CRecorset để so trùng cột trong những bảng của database.

Hình 2.15 Mối quan hệ class MFC ODBC database

ODBC connection ODBC rowset Database Dynaset hoặc snapshot

Sau đây là một số hàm quan trọng của class CRecordset :

Hàm Ý nghĩa

Open - Mở recordset

AddNew - Chuẩn bị thêm một record mới vào bảng

Update - Hồn tất tác vụ AddNew và Edit bằng cách lưu dữ liệu mới hoặc đã được sửa vào trong data source

Delete - Xố record hiện hành khỏi recordset

Edit - Chuẩn bị thực hiện những thay đổi trên record hiện hành.

IsOBF - Xác định liệu recordset cĩ được định vị trước record đầu tiên khơng

IsEOF - Xác định liệu recordset cĩ được định vị sau record đầu tiên khơng

MoveNext - Thiết lập record hiện hành cho record kế tiếp hoặc rowset kế MoveFirst - Thiết lập record hiện hành cho record đầu tiên trong recordset. MoveLast - Thiết lập record hiện hành cho record cuối cùng trong recordset

hay cho rowset cuối.

MovePrev - Thiết lập record hiện hành cho record ngay trước hoặc cho rowset trước.

GetDefaultConnect - Lấy chuỗi kết nối mặc định cho data source mà trên đĩ thiết lập recordset

GetDefaultSQL - Lấy chuỗi SQL mặc định

DoFieldExchange - Chuyển đổi dữ liệu giữa field dữ liệu trong recordset và record tương ứng trên data source

GetStatus - Lấy chỉ số của record hiện hành trong recordset và trạng thái tính cuối cùng.

GetRecordCount - Xác định record được đánh số cao nhất khi user di chuyển qua các record.

GetODBCFieldCount - Lấy số field trong một đối tượng recordset. GetODBCFieldInfo - Lấy thơng tin về field trong một recordset.

Ví dụ :

CString MyClass::GetDefaultConnect() {

return _T("ODBC;DSN=Student Registration"); }

sẽ nối kết vào ODBC với tên của data source là "Student Registration". CString MyClass::GetDefaultSQL()

{ (adsbygoogle = window.adsbygoogle || []).push({});

return _T("[Student]"); }

3. ISAPI trong việc truy xuất database :

Hình sau mơ tả quá trình truy xuất dữ liệu của một chương trình CGI/ISAPI :

a) Ghi dữ liệu : sử dụng hàm CDatabase::OpenEx()

Giống như CDatabase::Open(), OpenEx() tạo một kết nối tới database. Database::OpenEx() thường được dùng cho lập trình ISAPI vì cĩ thêm tham số CDatabase::noOdbcDialog. Khi sử dụng hàm CDatabase::Open(), nếu tham số khơng xác định đủ thơng tin để tạo kết nối ODBC (như quên hoặc sai user name hay password), MFC sẽ tự động mở hộp thoại kết nối ODBC để yêu cầu thêm thơng tin từ người dùng.

Đối chương trình trên Web, người lập trình sẽ khơng muốn cĩ một dialog được mở ra để chờ người dùng nhập dữ liệu vào. Vì Web server chạy như một dịch vụ nên sẽ khơng cĩ một dialog nào được mở nếu khơng thiết lập “Interative with Desktop” trong Service Control Panel.

Ví dụ :

CDatabase db;

Db.OpenEx(“DNS=Test”,, CDatabase::noOdbcDialog);

Một khi database đã mở, ta sẽ cĩ thể sẽ ghi dữ liệu vào. Cách đơn giản nhất là cố gắng chọn 1 record cĩ dữ liệu cần đưa vào. Nếu nhận được recordset rỗng (nghĩa là dữ liệu này chưa cĩ) thì ta sẽ thêm vào. Để thực hiện việc chọn lựa ghi dữ liệu vào hay khơng, ta sử dụng class CRecordset hay bất kỳ class nào derive từ nĩ, dùng khối try {. . .} catch {. . .}.

Giả sử ta cần thêm username vào bảng user :

CRecordset rsUser(&db);

stringSQL.Format(“Select * from user where username=”%s”, username); try SEND USER FORM WWW Browser CGI /ISAPI Application Formatted Results CONVERT TO HTML CONVERT TO SQL RESPONSE RECEIVE SQL QUERY RESULTS Database PROCESS HTML FILE Hình 1.16

{

rsUser.Open(Crecordset::Snapshot,stringSQL); }

catch (CDBException* pEx) {

*pCtxt << _T(“Error selecting from table”); TCHAR szErrorMessage[1024]; if(pEx->GetErrorMessage(szErrorMessage, sizeof(szErrorMessage))) { *pCtxt << szErrorMessage; *pCtxt << _T(“\r\n”); } EndContent(pCtxt); return; }

Để kiểm tra một recordset rỗng, ta dùng hàm IsBOF() trong class CRecordset. Hàm chỉ trả về TRUE nếu khơng cĩ record trong recordset vì khi recordset lần đầu tiên được mở, con trỏ sẽ chỉ tới record đầu tiên (nghĩa là IsBOF() = FALSE). Nếu khơng cĩ recordset rỗng, ta sẽ ghi dữ liệu vào databse dùng lệnh SQL rồi thơng báo cho người dùng rằng tác vụ ghi đã thành cơng.

b) Xử lý ngoại lệ (exception) :

Cĩ thể cĩ nhiều tình huống khơng mong đợi sẽ diễn ra khi chương trình đang chạy như hết bộ nhớ, hết khơng gian đĩa, cố gắng ghi hay đọc dữ liệu lên vùng nhớ đang được bảo vệ. . .

Thay vì phải viết code để kiểm tra và xử lý lỗi, C++ đưa ra một phương pháp rất mạnh nhưng dễ sử dụng cho việc xử lý lỗi hay ngoại lệ. Đĩ là những lệnh xử lý ngoại lệ C+ + chuẩn như : try, catch và throw.

Định dạng của khối try/catch là : try

{

// đoạn mã mà ta muốn thực hiện // cĩ thể cĩ lỗi trong khi thực hiện }

catch (biến error-type) {

// đoạn mã thực thi nếu cĩ exception }

catch (biến error-type khác) {

// đoạn mã thực thi nếu cĩ exeption khác nữa }

{

// catch bất kỳ exception nào khác } (adsbygoogle = window.adsbygoogle || []).push({});

// đoạn mã thực thi tiếp theo của chương trình nếu ta khơng thốt từ khối catch.

Khối “try” của đoạn mã thực hiện những gì ta muốn thực hiện. Khi thực hiện, ta nghi ngờ sẽ cĩ lỗi nào đĩ xảy ra; nếu cĩ lỗi đĩ, exception trong khối catch sẽ được gọi để xử lý.

Khơng phải mọi exception đều là lỗi, nhưng là những đáp ứng được định nghĩa cho những tình huống khơng mong đợi.

Như trong ví dụ, exception mà ta cố gắng bắt được định nghĩa trong MFC là CDBException. Nếu một kết quả khơng mong đợi được trả về bởi một trong những lệnh gọi database ODBC mà được che trong class CRrecordset thì CDBException được gọi.

Nếu ta giữ một loại exception đặc biệt nào đĩ với lệnh catch, đoạn mã trong khối catch sẽ được thi hành. Chương trình thực thi sẽ ngưng tất cả các khối catch khác nếu một trong các khối catch trả về hoặc truyền exception cho khối try/catch kế.

c) Đọc dữ liệu :

Khi dữ liệu đã cĩ trong database, ta cĩ thể muốn truy xuất nĩ. Trong trường hợp này, ta cũng sử dụng những hàm truy vấn cơ sở dữ liệu ODBC

_____________________________________________________________Chương 3 CHUẨN ODBC - INTERNET INFORMATION SERVER

I. Chuẩn ODBC (Open Database Connectivity)

Cĩ rất nhiều hệ thống database khác nhau, nếu khơng cĩ một chuẩn chung để giao tiếp giữa những hệ database này thì khi ứng dụng chuyển đổi từ hệ database này sang hệ database khác, mã của chương trình phải thay đổi lại cho phù hợp. Để giải quyết tình trạng này, người ta đã đưa ra một chuẩn để các kiểu database khác nhau cĩ thể giao tiếp được, đĩ là ODBC (Open DataBase Connectivity).

Chuẩn ODBC, là một tập mở rộng của những thư viện liên kết động (DLL), cung cấp giao diện lập trình ứng dụng cơ sở dữ liệu chuẩn. ODBC dựa trên phiên bản được chuẩn hố của SQL. ODBC là một lớp nằm giữa chương trình ứng dụng và hệ thống database. Với ODBC và SQL, ta cĩ thể viết mã truy xuất đến cơ sở dữ liệu mà khơng phụ thuộc vào bất kỳ phần mềm cơ sở dữ liệu nào.

Chuẩn ODBC khơng chỉ định nghĩa luật văn phạm của SQL mà cịn định nghĩa giao diện lập trình của ngơn ngữ C cho một databse SQL. Do đĩ, đối tượng C hay C++ cĩ thể truy xuất tới bất kỳ DBMS nào cĩ driver ODBC.

ODBC là lớp phục vụ giao tiếp giữa chương trình ứng dụng và hệ điều hành cũng như hệ thống file của database. ODBC nhận những yêu cầu truy xuất thơng tin từ chương trình ứng dụng, chuyển nĩ thành ngơn ngữ mà database engine hiểu được để truy xuất thơng tin từ database. Như vậy, nĩ cho phép chúng ta phát triển tập hợp các function và method để truy xuất đến database mà khơng cần phải hiểu sâu về database đĩ.

Ví dụ, MS Access cho phép chúng ta liên kết (link) hay gắn (attach) một bảng đến database. Khi thực hiện điều này, Access sẽ yêu cầu chúng ta chọn loại database (database mà Access trực tiếp hỗ trợ), nếu khơng cĩ loại database phù hợp chúng ta cĩ thể chọn ODBC. Khi chọn ODBC, nĩ sẽ liệt kê tất cả các cấu hình khác nhau mà chúng ta đã thành lập, và chọn một trong số đĩ bất kể database engine nào.

Khi ứng dụng làm việc với ODBC, nĩ làm việc với data sourcedatabase engine

mà nĩ tham khảo. Khi thiết lập cấu hình cho client mà cài đặt những kết hợp driver với database. Những kết hợp này sẽ được đặt tên và được sử dụng khi chúng ta muốn yêu cầu kết nối để truy xuất đến database đĩ. Những kết hợp giữa database và driver gọi là những Data Source Name hay những DSN. Khi muốn mở một database thơng qua ODBC, chúng ta phải cung cấp DSN, UserID và Password. ODBC sẽ lấy những thơng số mà chúng ta đã thiết lập cấu hình sẵn (trong Control Panel - ODBC32) để tạo kết nối.

- DSN : Tên DSN mà chúng ta đã đặt khi thiết lập cấu hình ODBC

- UID : UserID được sử dụng để login vào database

- PWD : Password được sử dụng khi login

Như vậy, để truy xuất đến các database thơng qua ODBC, ta phải cài đặt driver cho database đĩ. ODBC cĩ nhiều driver để hỗ trợ cho các database khác nhau nhằm chuyển các bảng tính hay các tập tin văn bản thành data source. Hệ điều hành căn cứ vào thơng tin được ghi bởi ODBC Administrator trong Registry để xác định cấp của ODBC driver giao tiếp với data source.

Việc nạp ODBC driver là "trong suốt" (transparent) đối với chương trình ứng dụng. Trong mơi trường mạng, ODBC đảm nhận luơn cả việc xử lý những vấn đề truy xuất dữ liệu trên mạng như việc truy xuất đồng thời hay giải quyết tranh chấp.

Tĩm lại, ODBC là một giao tiếp lập trình chuẩn cho người phát triển ứng dụng và nhà cung cấp database. Trước khi ODBC trở thành một chuẩn khơng chính thức cho các chương trình ứng dụng trên Windows giao tiếp với các hệ thống database, người lập trình phải sử dụng các ngơn ngữ riêng cho mỗi database mà họ muốn kết nối tới. Khi ODBC ra đời thì người lập trình khơng cịn bận tâm về điều này nữa, họ cĩ thể truy xuất đến các database khác nhau bằng các thủ tục và hàm như nhau. Mã của chương trình ựng dụng khơng thay đổi khi data source chuyển từ hệ thống database này sang hệ thống khác (ví dụ từ Oracle sang SQL server).

Ưu điểm và nhược điểm của ODBC

Vì ODBC cung cấp việc truy xuất đến bất kỳ dạng database thơng dụng cĩ sẵn, do đĩ tạo nên sự uyển chuyển trong những ứng dụng. Ta cĩ thể chuyển ứng dụng từ hệ thống database này sang hệ thống database khác mà khơng tốn nhiều chi phí và cơng sức. DSN của ta cĩ thể tham khảo đến bất kỳ một database nào. Điều này cho phép ta cĩ thể tham khảo đến bất kỳ một database nào. Như vậy, ta cĩ thể phát triển ứng dụng theo một hệ thống database này (chẳng hạn như Microsoft Access) nhưng lại biến đổi thành sản phẩm sử dụng hệ thống database khác (ví dụ như Microsoft SQL Server) bằng cách đơn giản là thay đổi driver được sử dụng DSN mà chúng ta định nghĩa trong ứng dụng.

Việc gọi hàm qua lớp ODBC đến database engine khơng phải là khơng tổn phí. ODBC phải hỗ trợ khả năng chuyển đổi các hàm được gọi từ ứng dụng, việc này cần phí tổn cho việc xử lý và làm quá trình truy xuất database chậm đi. Hơn nữa, ODBC khơng hỗ trợ việc truy xuất cơ sở dữ liệu đối tượng (Object Database)

II. Internet Information Server (IIS)

1. Web Server (HTTP server)

Là một chương trình được nối với Web, cung cấp tài nguyên dựa trên những yêu cầu từ browser. Tài nguyên được yêu cầu luơn được xác định bởi một URL.

Đối với bất kỳ một Web site nào, trung tâm của nĩ là back-end server, là một bộ phận chương trình dùng để hồn thành các nhiệm vụ xử lý mà chương trình đĩ được thiết kế

ra để thực hiện. Web server cĩ thể cung cấp các trang Web tĩnh theo dạng tài liệu HTML, nhưng nĩ cũng cĩ thể thực thi những ứng dụng để nâng cao nội dung của một site. (adsbygoogle = window.adsbygoogle || []).push({});

2. Internet Information Server (IIS) 2.1.Giới thiệu :

Internet InFormation Server là một phần mềm phục vụ cho việc xuất bản thơng tin trên Internet và Intranet. Phần mềm này chạy trên mơi trường Windows NT, nĩ cung cấp ba dịch vụ:

- WWW (World Wide Web).

- FTP (File Transfer Protocol)

- Gropher

Ở đây ta chỉ tìm hiểu dịch vụ WWW của IIS.

WWW:

WWW viết tắt của World Wide Web (được biết như là Web) là một dịch vụ cung cấp thơng tin bằng siêu văn bản (Hypertext) chạy khắp trên internet. Web cĩ khả năng liên kết mạnh với các dịch vụ Internet khác và các nguồn tài nguyên khắp mọi nới.

Hypertext :

Hypertext là văn bản siêu liên kết mà người sử dụng cĩ thể truy cập đến các trang khác bởi ”click” chuột trên cụm từ được đánh dấu, cơng việc tham khảo liên kết nầy dễ dàng như lật một trang giấy. Người sử dụng trên Web cũng cĩ thể thực hiện tìm kiếm trong trang văn bản, số cơ chế tìm kiếm là hồn tồn cho phép trên trang Web.

Khi đọc tài liệu Hypertext người đọc khơng cần phải theo tổ chức tuần tự của các trang tài liệu. Người đọc cĩ thể theo đuổi một chuỗi riêng của mình. Điều nầy làm cho Hypertext trở thành một cơng cụ học tập rất thuận lợi. Hypertext giúp chúng ta khám phá từ tồn bộ tài liệu của chính nĩ đến tồn bộ các tài liệu khác. Hypertext bao gồm cả văn bản, hình ảnh lẫn âm thanh. . .

2.2.Cài đặt ứng dụng trên Internet Information Server

Các ứng dụng hoặc các script được đặt trong thư mục /scripts, là thư mục ảo cho các ứng dụng. Thư mục này được quyền truy xuất và thực thi.

Phải chắc rằng mỗi process đã được khởi động bởi ứng dụng, và sử dụng một tài khoản (account) với các quyền cho phép thích hợp. Nếu các ứng dụng tương tác với các file khác, account mà ứng dụng chạy trên đĩ phải cĩ quyền truy xuất để sử dụng các file này. Mặc định, các ứng dụng sử dụng account IUSR_computername để thực thi.

Bảo mật là một trong những vấn đề chính đối với bất kỳ Web site nào. IIS là một server bảo mật. Hệ thống bảo mật của IIS liên kết chặt chẽ với hệ thống bảo mật của Windows NT. Để truy xuất được site mong muốn, user phải qua một số lớp kiểm tra bảo mật được đưa ra bởi IIS và Windows NT.

Đầu tiên là tài khoản của user. IIS sử dụng cùng một tài khoản của user mà WindowsNT cho phép truy xuất. Người sử dụng phải cĩ ID user và mật khẩu hợp lệ mới nối tới được Web site cần đến. Vì thế khơng ai cĩ thể truy xuất tới IIS mà khơng cĩ một tài khoản. Nhưng làm thế nào ta cĩ thể gán một tài khoản cho hàng triệu người muốn đến thăm site của mình? Bằng cách cung cấp một tài khoản logon vơ danh (Anonymous). Tài khoản anonymous cĩ thể gán cho bất kỳ user nào khơng cĩ ID user và mật khẩu (password) thực trong một domain của WindowsNT.

Khi IIS được cài đặt nĩ sẽ tự động thiết lập một tài khoản cho việc logon vơ danh.

Một phần của tài liệu THIẾT KẾ VÀ HIỆN THỰC CHƯƠNG TRÌNH QUẢN LÝ QUẢNG CÁO TRÊN TRANG WEB.doc (Trang 34)