asp中利用xmlhttp实现远程管理数据库

原创 2004年07月17日 01:25:00

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 工作流图如下:


使用 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.

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

下载文件地址:http://www.codeproject.com/useritems/goiscode/supervisor.zip

asp mvc特性应用

介绍aspmvc 各种特性,包括控制器,视图,EF,数据注解,路由等特性,并以Visio Studio 2013 作为演示工具,演示相关的特性使用及效果
  • 2018年04月11日 11:14

ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送

        利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了,但是在制作ASP小偷的过程中,很多人就发现ASP小偷不如PHP小偷的那么强大了。确实,如果在原网站如果存在表单提交或c...
  • loyos
  • loyos
  • 2006-08-07 20:23:00
  • 847

ASP中使用XMLHTTP读取远程数据1

...
  • blueonly
  • blueonly
  • 2006-01-20 09:38:00
  • 1520

asp xmlHttp用法举例

一般来说,我们做网站,数据都是在我们自己的数据库中的,但有些数据,我们不想也不能自己去收集数据,比如新闻\天气预报,(我们无法天天更新),所以我们就需要借助别人的网站来显示这些内容 。但如果直接链接到...
  • chinaPhoneLab
  • chinaPhoneLab
  • 2007-03-15 17:28:00
  • 5730

xmlhttp让asp实现“多线程”

  看了大白菜芯写的php实现多线程,一时间觉得有用,就改了个asp版的。。呵呵,这里感谢他的思路!(http://blog.csdn.net/wapweb/archive/2004/08/16/76...
  • wzgme
  • wzgme
  • 2004-10-26 18:36:00
  • 2399

远程访问数据库的一种方法(asp生成)

本段代码根据数据库生成ado Recordset 可以直接load的xml,并在IE中显示为xml ,可供delphi等远程访问access数据库 !--#include file="conn.asp...
  • lanxingw
  • lanxingw
  • 2007-01-30 17:01:00
  • 325

使用XmlHttp结合ASP实现网页的异步调用

通过xmlHttp和ASP的结合,我们可以轻松完成网页的异步调用。代码如下:1.新建Display.asp(这是前台显示页面)注意xmlhttp.readyState的4个属性1:LOADING;2:...
  • shiqiang1234
  • shiqiang1234
  • 2006-05-08 12:37:00
  • 494

ASP+XMLHTTP取得网页代码

'*****************************************************' Function Name:xmlReadUrl(url)' 功能:读取Url的HTML...
  • cnLiou
  • cnLiou
  • 2013-06-15 07:04:16
  • 552

用XMLHttp获取服务器页面数据实例

  Dim objXMLHTTP, xml  Set xml = Server.CreateObject("Microsoft.XMLHTTP")    xml.Open "GET", "http:/...
  • greyls
  • greyls
  • 2007-08-08 19:28:00
  • 545

用ASP实现XMLHttpRequest

目前好多语言都可以实现Ajax,像Java, .Net等等。其实Ajax的核心内容就是XMLHttpRequest。如果读者XMLHttpRequest不太了解,可以在Google上找找《Dynami...
  • Happy_999
  • Happy_999
  • 2008-05-12 16:06:00
  • 1007
收藏助手
不良信息举报
您举报文章:asp中利用xmlhttp实现远程管理数据库
举报原因:
原因补充:

(最多只允许输入30个字)