DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> asp中利用xmlhttp實現遠程管理數據庫
asp中利用xmlhttp實現遠程管理數據庫
編輯:AJAX詳解     

A RevIEw of Remote Database Administer
幾年之前, CGI-BIN 模塊被用作遠程管理數據庫。現在, CGI-BIN 用得越來越少了,原因是它運行速度很慢,而且難於維護。
近幾年,組件對象模型 (COM) 得到了廣泛的運用,不幸的是,在虛擬主機上注冊 COM 組件是一件很麻煩的事。

在 .Net 或 J2EE 平台上, 我們可以很方便地開發n層結構的 Web 應用程序。但是對於網站來說,我們有更方便的方法遠程管理數據庫,例如:運用 XMLHTTP 和 ADO/ADOX.

RDBA 如何工作
RDBA's 的工作流如下:
1 客戶端向服務器發出一個查詢請求。
2 服務器接受並執行之,然後返回值到客戶端。
3 客戶端從服務器接受結果並顯示之。
RDBA 依賴的兩個技術:
1 客戶端和服務器交互(發送命令,返回結果)的通道: XMLHTTP.
2 服務器上用於獲取數據的中間層: ADO/ADOX.

RDBA's 工作流圖如下:


 

RDBA working flow - xmlhttp_adox.gif

使用 XMLHTTP

XMLHTTP 用於通過 HTTP 請求來發送或接受 XML 信息。

實際上 XMLHTTP 還有其他的很多用途。
你可以用它來向服務器發送命令(可用 XML, string, stream, 或 unsigned array). 命令也可以作為 URL 的參數
還可以向客戶端發送結果信息( XML, string, stream, 或 unsigned array)
更多信息請參考:

在客戶端使用 XMLHTTP 很簡單,只有 5 步:
1. 創建 XMLHTTP 對象。
2. 指定方法,URL,以及驗證,對服務器打開 XMLHTTP。 打開方法可以是 "POST" 或 "GET"。
3. 向服務器發送 request 信息。
4. 等待,直到從服務器接受到結果。
5. 釋放 XMLHTTP 對象。

XMLHTTP 方法:
Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassWord
bstrMethod: 用於打開連接的 HTTP 方法,如 GET 或 POST
bstrUrl: 請求的服務器上的 URL,如:http://Myserver/Mypath/Myfile.ASP。
varAsync: 邏輯型。表示是否同步調用。缺省為 true (調用立刻返回)。 但通常將它設為 false ,以便等待服務器的返回值。
bstrUser: 身份驗證的用戶名信息。
bstrPassWord: 身份驗證的密碼信息。


Send varBody
varBody: 類型可以為:BSTR, SAFEARRAY of UI1 (unsigned bytes),  XML DOM 對象的IDispatch接口, 或 IStream。

setRequestHeader bstrHeader, bstrValue
bstrHeader: 要設定的 HTTP 頭的名字。
bstrValue: HTTP 頭的值。
如果要 POST 數據,可以添加一個 HTTP 頭,以便告訴接受方正在發送數據:
XMLhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

XMLHTTP 屬性:
onreadystatechange: 指定 readyState 屬性改變時調用的事件處理函數。
responseBody: 以無符號字節數組的形式 response
responseStream: 以 IStream 的形式 response
responseText: 以字符串的形式 response
responseXML: 以 XML 文檔 response

下面是代碼片斷:

Function GetResult(urlStr)  Dim xmlHttp  Dim retStr   Set XMLHttp = CreateObject("Msxml2.XMLHTTP") '創建對象  On Error Resume Next               '錯誤處理  XMLHttp.Open "POST", urlStr, False '用 "POST" 方法異步打開連接  '發送表單數據  XMLHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"  XMLHttp.Send  '向服務器發送 HTTP 請求  If Err.Number = 0 Then   '如果成功    retStr = XMLHttp.responseText '等待從服務器接受數據  Else    retStr = "地址未發現"   '錯誤信息  End If  Set XMLHttp = nothing   '釋放對象  GetResult = retStr   '返回 response 給調用者End Function

GetResult() 函數的參數是要請求的 url, 你可以添加子參數,如:
urlStr = "server.ASP?cmd=" & cmd & "&db=" & db & "table=" & table
    cmd: 命令類型,如:query, modify, delete 等
    db: 服務器上的數據庫名
    table: 表名

使用何種數據類型?

正如上面所說,通過  XMLHTTP 通道傳送的數據可以有很多種類型。其中用的最多的是 XML DOM 和 STRING。

選用何種數據類型取決於程序的需要。

為了從服務器取得數據,客戶端和服務器都使用 XML 數據是一個很好的方法。因為這樣可以處理大量的數據,請求服務器添加/刪除/修改/查詢 記錄,或在客戶端排序/過濾數據。

本文的目的是為了在虛擬主機上遠程管理數據庫,所以這需要有如下兩個功能:
1. 遠程管理數據庫:添加/刪除/修改/查詢 遠程數據庫/表/字段。
2. 遠程管理數據庫中的數據: 添加/刪除/修改/查詢 記錄

所以這裡我們使用 XMLHTTP 來發送/接受 字符串

這樣做的好處很明顯:可以無閃爍刷新頁面

由於是采用字符串, 所以可以簡單的使用 "Response.Write" 來返回結果。一旦服務器 response 完畢,客戶端用 "XMLHttp.responseText" 方法來獲取整個結果,並返回給調用者,用於刷新頁面數據。

如果采用異步方式,則客戶端按下按鈕後,會有一定的延時,客戶端必須等待返回數據。如果采用異步或使用 XML DOM 則可以避免這一點。

Using ADOX

ADO 不能用來遠程管理數據庫,我們可以使用 ADOX。

ADOX 是 ADO 的擴展, 它提供了更多的函數用於處理數據庫。一旦通過身份認證,並且你的角色為數據庫管理員,那麼你可以通過 ADOX 作任何操作。

This sample requests:
生成動態的 select 菜單,顯示指定路徑下的數據庫名。
生成動態的 select 菜單,顯示上述菜單中選定的數據庫中的表名。 
根據選定的數據庫和表,動態的列出字段名。

根據虛擬目錄路徑的改變和 select 的改變,即時的改變顯示的內容而且無閃爍的刷新頁面。

使用 Scripting.FileSystemObject 獲得給定路徑的數據庫名。 使用 ADOX 獲取表名和字段名。代碼如下:

獲取一個數據庫中的表名:

Sub GetTables_Server(DBName)  Dim i  Dim catDB    'ADODB.Catalog 對象  Set catDB = Server.CreateObject("ADOX.Catalog")  '創建 ADODB.Catalog 對象  On Error Resume Next  '錯誤處理  catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _                           "Data Source=" & Server.MapPath(DBName)  '打開連接                           '如果需要可加上用戶名和密碼  If Err.Number = 0 Then   '成功    ' 動態產生 select 選單    Response.Write "<select name='selTable' onChange=ShowResult('fIElds')>"    With catDB      For i = 0 To .Tables.Count -1       If .Tables(i).Type = "TABLE" then ' 如果是一個表  '將表名添加到 select         Response.Write "<option value=" & .Tables(i).Name & ">" &_                        .Tables(i).Name &"</option>"       End If     Next  End With  Response.Write "</select>" ' select 輸出完畢  Else   '錯誤信息   Response.Write "錯誤: 不能打開數據庫 - " & DBName  End If  Set catDB = Nothing ' 釋放 ADODB.catalog 對象End Sub

獲取表中的字段名:

Sub GetFIElds_Server(dbName, tableName)  Dim i, j  Dim catDB 'ADODB.Catalog 對象  Set catDB = Server.CreateObject("ADOX.Catalog")  '創建 ADODB.catalog 對象  On Error Resume Next  '錯誤處理  catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _           "Data Source=" & Server.MapPath(dbName)  '打開連接   '如有必要在此添加用戶名和密碼  If Err.Number = 0 Then        ' 成功    '找到匹配的表名    With catDB      For j = 0 To .Tables.Count -1 If (.Tables(j).Type = "TABLE") and (.Tables(j).Name = tableName) Then          Exit For        End If        Next    End With    '列出字段名    With catDB.Tables(j)      For i = 0 To .Columns.Count -1        '如果是主鍵,選中之              If .Columns(i).PropertIEs("Autoincrement") = True Then          Response.Write "<input type='radio' name='fIEld' value=" &_                      .Columns(i).Name & " checked=true>" & .Columns(i).Name & ""                                                   '顯示字段名        Else          Response.Write "<input type='radio' name='fIEld' value=" &_                         .Columns(i).Name & ">" & .Columns(i).Name & ""                                                   '顯示字段名        End If      Next    End With  Else    'Error message    Response.Write "錯誤: 不能打開數據庫 - " & dbName  End If  Set catDB = Nothing ' 釋放 ADODB.catalog 對象End Sub

注:本例中所有的表采用了自增字段作為主鍵。如果你的數據庫中未采用自增字段作為主鍵或未指定主鍵,則需要重寫上述代碼。使用自增字段作為主鍵是一個很好的習慣。 

Use the sample

A screenshot of GOIS RDBA is showed as Fig. 2.

GOIS RDBA - goisrdba_en.gif

System required:
To run this sample, the follows should be installed on your PC:
Windows 98/Me/XP/2000,MSXML 4.0,MS Access 2000,IE 5.5 or above.

Install and execute:
1. Download the sample ZIP file - supervisor.zip.
2. Unzip the file under a path in your IIS, for example: C:\Inetpub\wwwroot\supervisor。
3. Input "localhost/supervisor/supervisor.ASP" in the url address on your IE, then GO.
4. By a little changing, such as change the path, authorize the user, you can upload this sample source to your virtual hosting to administer your own database.

There are several sample databases and two source files in the downloadable ZIP file.
The sample databases will automatically unzip to a "database" path under the working path, for example:
/superviOSr/database。

兩個源文件是:
服務器端: server.ASP
客戶端: supervisor.ASP

下載源程序 - 143 Kb

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved