【发布时间】:2011-02-22 09:19:06
【问题描述】:
我使用 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 时,这会爆炸。
用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序错误“80040e21”
多步 OLE DB 操作产生错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。
谁能告诉我我做错了什么或建议一种更好的方法来将从 XML 加载的数据复制到不同的数据库?
更新,部分解决
事实证明,我的错误是由于我试图设置 Identity 字段的值造成的。如果我暂时将该字段更改为 not 是一个身份,所有数据都会完美插入。
现在是一个后续问题
我如何暂时关闭该字段的 Identity 属性,然后在完成更新后将其重新打开?
【问题讨论】:
标签: asp-classic vbscript sql-server-2000 mxml adodb