如何在QTP中的VBScript中从db2数据库中检索xml列

时间:2013-01-11 15:05:29

标签: xml vbscript db2 qtp

我正在尝试从DB2数据库中的表中检索XML列。使用下面的代码,我可以检索任何没有xml作为数据类型的列:

query = "some query"  
strConn = "my connection string"  
set dbConn = CreateObject("ADODB.Connection")  
set rs = CreateObject("ADODB.RecordSet")  
dbConn.Open strConn  
rs.Open query, dbConn  

rs.MoveFirst  
While Not rs.EOF  
 data = rs.Fields(0)  
 rs.MoveNext  
Wend  
dbConn.Close  

当数据是xml数据类型时,“data = rs.Fields(0)”行会抛出“未指定的错误”。我想因为记录集返回一个XML对象,我需要将它分配给这样的DOM对象:

Set xDOM = CreateObject("Microsoft.XMLDOM")  
rs.Save xDOM, adPersistXML  

但是这仍然不起作用,QTP在执行保存行时抛出“未指定的错误”。

我用谷歌搜索答案,但找不到任何有用的东西。是否有人成功完成了这项工作?

感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:0)

根据DB2 - .NET datatypes,DB2Xml映射到Byte()/ Blob。所以也许你可以像盖茨先生那样处理你的XML领域deals with pictures,例如:

Set cn = New ADODB.Connection   ---> CreateObject("ADODB.Connection")
cn.Open "DB2 Connection String"

Set rs = New ADODB.Recordset    ---> CreateObject("ADODB.Recordset")
rs.Open "Your SQL", cn, adOpenKeyset, adLockOptimistic ---> Const defines needed

Set mstream = New ADODB.Stream ---> CreateObject("ADODB.Stream")
mstream.Type = adTypeBinary ---> Const define needed
mstream.Open
mstream.Write rs.Fields("Your XML field").Value
mstream.SaveToFile "fullfilespec.xml", adSaveCreateOverWrite ---> Const define needed

rs.Close
cn.Close

(显然未经测试的空气码)

P.S。你的rs.Save xDOM, adPersistXML完全错了; .Save将整个记录集保存到指定为第一个参数的文件中。