分享
 
 
 

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

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

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

使用 XMLHTTPXMLHTTP 用于通过 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 sampleA 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。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有