2010-05-21 68 views
0

我使用以下方式的ADODB记录集的.Save()方法创建了一个XML文件。将ADODB记录集转储到XML,然后返回到记录集,然后保存到数据库

dim res 
dim objXML: Set objXML = Server.CreateObject("MSXML2.DOMDocument") 

'This returns an ADODB recordset 
set res = ExecuteReader("SELECT * from some_table) 

With res      
    Call .Save(objXML, 1) 
    Call .Close() 
End With 

Set res = nothing 

让我们假设上面生成的XML然后被保存到文件。

我能够读取XML回到这样一个记录:

dim res : set res = Server.CreateObject("ADODB.recordset") 

res.open server.mappath("/admin/tbl_some_table.xml") 

,我可以遍历没有任何问题的记录。

但是我真正想做的是将res中的所有数据保存到完全不同的数据库中的表中。我们可以假设some_table已经存在于这个其他数据库中,并且具有与我最初查询制作XML的表完全相同的结构。

我开始通过创建一个新的记录,并使用AddNewres添加的所有行的新记录

dim outRes : set outRes = Server.CreateObject("ADODB.recordset") 
dim outConn : set outConn = Server.CreateObject("ADODB.Connection") 
dim testConnStr : testConnStr = "DRIVER={SQL Server};SERVER=dev-windows\sql2000;UID=myuser;PWD=mypass;DATABASE=Testing" 

outConn.open testConnStr 

outRes.activeconnection = outConn 
outRes.cursortype = adOpenDynamic 
outRes.locktype = adLockOptimistic 
outRes.source = "product_accessories" 
outRes.open 


while not res.eof 
    outRes.addnew 

    for i=0 to res.fields.count-1 
     outRes(res.fields(i).name) = res(res.fields(i).name) 
    next 
    outRes.movefirst 

    res.movenext 
wend 
outRes.updatebatch 

但这种炸弹我第一次尝试将值分配从resoutRes

Microsoft OLE DB提供程序的ODBC驱动程序错误 '80040e21'

多步OLE DB操作产生错误。检查每个OLE DB状态值(如果可用)。没有工作完成。

有人可以告诉我我做错了什么或建议一个更好的方法来将从XML加载的数据复制到不同的数据库?

更新,部分解决

所以,事实证明,我的错误是由我试图设置一个身份字段的值造成的。如果我暂时将该字段更改为而不是是一个身份,则所有数据都会完美插入。

现在的后续问题

我怎样才能暂时关闭该字段的标识属性,然后重新打开它时,我与我的更新做了什么?

回答

0

因为上述问题,我从来没有能够得到Recordset.AddNew工作。

作为解决方法,我正在执行SET IDENTITY_INSERT table ON,执行INSERT sql和SET IDENTITY_INSERT table OFF

0

读取XML返回后,将记录集的连接属性设置为新的数据库连接,然后调用UpdateBatch。

+0

虽然这不会给出任何错误,但它也不会将任何记录插入到新数据库的表中。 – 2010-05-21 14:28:14

+0

自从我与ADO合作以来,这已经很年轻了,但我认为您应该设置一些属性以表明ADO处于“脏”状态。顺便说一下,当您将ADO保存为XML时,它是否有元素? – Raj 2010-05-21 14:47:31

+0

没有任何插入语句。这是一个xml文档,Schema定义了字段,然后是一堆定义实际数据的z:row节点。 – 2010-05-21 14:48:51

相关问题