我使用ADODB记录集的.Save()
方法以下列方式创建了一个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的表完全相同的结构。
我首先创建了一个新记录集,并使用AddNew
将res
中的所有行添加到新记录集
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
但是,当我第一次尝试将res
的值分配给outRes
时,这会发生爆炸。
Microsoft OLE DB Provider for ODBC Drivers错误'80040e21'
多步OLE DB操作生成错误。检查每个OLE DB状态值(如果可用)。没有工作。
有人可以告诉我我做错了什么或建议我更好的方法将从XML加载的数据复制到不同的数据库吗?
事实证明,我的错误是由于我尝试设置身份字段的值而引起的。如果我暂时将该字段更改为不为标识,则所有数据都会完美插入。
我如何暂时关闭该字段的Identity属性,然后在完成更新后将其重新打开?
答案 0 :(得分:0)
读回XML后,将记录集的连接属性设置为新的数据库连接,然后调用UpdateBatch。
答案 1 :(得分:0)
由于上述问题,我无法让Recordset.AddNew工作。
作为一种解决方法,我正在执行SET IDENTITY_INSERT table ON
,执行INSERT sql和SET IDENTITY_INSERT table OFF
。