以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 XML 与 数据库 』  (http://bbs.xml.org.cn/list.asp?boardid=17)
----  数据库中的XML应用实例  (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=11095)


--  作者:yibingzheng
--  发布时间:10/18/2004 11:33:00 AM

--  数据库中的XML应用实例
我们在该例中介绍如何实现数据库和XML结合。您将可以看到,该例中实现对一般的关系数据库进行查询等操作,并将结果输出到通用的XML。例中还示范结合采用XSL规范XML的格式,用HTTP和ASP进行网络的通信和处理。您可以在此基础上进行许多扩充的开发,特别是服务器/客户端架构的Web应用。


下面我们来详细说明该实例及使用方法:

(1)准备工作


打开控制面板,将Northwind.mdb数据库添加至您的用户数据源(DNS)并命名为"nwind";
process.asp放在服务器端,第4部分中要用到该文件处理HTTP请求;
用Visual Basic 6.0打开test.vbp项目,引用MS XML Version2.0库。


(2)定义的变量

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim xmlstr As String
Dim xmldoc As MSXML.DOMDocument
Dim xmlhttp As MSXML.XMLHTTPRequest
Dim xsldoc As MSXML.DOMDocument
Dim message As MSXML.DOMDocument
Dim query As String


(3)初始化
函数init(),在Form_Load()中调用

'建立和打开ADODB与ODBC的数据连接
Set con = New ADODB.Connection
con.ConnectionString = "DSN=nwind;UID=sa;PWD=;"
con.Open


'建立XML 文档对象(XML Document Objects)
Set xmldoc = New MSXML.DOMDocument
Set xsldoc = New MSXML.DOMDocument
Set message = New MSXML.DOMDocument


(4)实现查询和输出:
在Command1_Click函数中实现


'查询数据库
query = "Select * FROM Customers WHERE CustomerID = '" & Text1.Text & "'"
Set rs = con.Execute(query)


'将查询的结果存储到XML文件
On Error Resume Next
Kill ("recordset.xml")
rs.Save "recordset.xml", adPersistXML
xmldoc.async = False
xmldoc.Load ("recordset.xml")


'执行对子树的查询,实际上是滤除其它Schema定义的部分, 提取出满足查询结果的纯数据
MsgBox xmldoc.selectSingleNode("//z:row").xml


'载入样式表(stylesheet)并将XML规格化
xsldoc.async = False
xsldoc.Load ("standard.xsl")
xmldoc.transformNodeToObject xsldoc, message


'将XML发送给服务器进行处理
Set xmlhttp = New MSXML.XMLHTTPRequest
xmlhttp.Open "POST", "http://icds/process.asp", False ‘要根据process.asp的位置指定好第2项参数
xmlhttp.send message


(5)使用应用程序
按F5执行该程序,在上面的文本框中输入查询的顾客的ID, 按下面的”处理顾客信息”执行查询并输出结果。



--  作者:阳光不老
--  发布时间:10/20/2004 2:57:00 PM

--  
恩,不如写成.vbs
--  作者:lentty
--  发布时间:11/16/2004 1:21:00 PM

--  
我这样在VB里使用,居然会因为不同的SQL语句,Save成空字符串,有高手能指点么?
Public Function GetPrtInfo(PolID As Variant, PolSeq As Variant, PrtFlag As Variant) As String
Dim sql As String
Dim xDom As New DOMDocument
Dim rs1 As New Recordset
'On Error Resume Next
sql = "select * from printinfo" ' where policyid='" & PolID & "' and AutoPrtFlag='" & PrtFlag & "' order by ChgDate "
rs1.Open sql, conn, adOpenKeyset, adLockReadOnly, -1
rs1.Save xDom, adPersistXML
If Err.Number = 0 Then
    GetPrtInfo = xDom.xml
Else
    GetPrtInfo = ""
    Call WriteToLog("GetPrtInfo", PolID & "," & PolSeq & "," & PrtFlag, Err.Description)
End If
rs1.Close
Set rs1 = Nothing
Set xDom = Nothing
End Function
我这样写了一年多,从来没有遇到过这样的怪问题
--  作者:lentty
--  发布时间:11/16/2004 1:29:00 PM

--  
我的SQL语句肯定都没有问题的,都运行成功地
555555555,这会儿居然没人在
--  作者:xmzhy
--  发布时间:11/25/2004 4:45:00 PM

--  
能否写成类?conn关联有问题吗?
--  作者:布克
--  发布时间:12/17/2004 12:29:00 AM

--  
要是用 DataAnyWhere(xml) Bridge 几分钟就搞定啦,可以同时操作几个数据库呢!
用 DataAnyWhere(xml) Tools 还可以生成 java 代码。
去 http:///www.daw-xml.com 看看!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms