我通过.Save()
以下方式使用 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 的表具有完全相同的结构。
我首先创建一个新记录集并使用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
但是当我第一次尝试将值分配给 to 时,这会res
爆炸outRes
。
用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序错误“80040e21”
多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有做任何工作。
有人可以告诉我我做错了什么或建议一种更好的方法来将从 XML 加载的数据复制到不同的数据库吗?
更新,部分解决
所以事实证明,我的错误是由于我试图设置Identity字段的值引起的。如果我暂时将该字段更改为不是身份,则所有数据都会完美插入。
现在是一个后续问题
如何暂时关闭该字段的 Identity 属性,然后在完成更新后将其重新打开?