0

我通过.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 属性,然后在完成更新后将其重新打开?

4

2 回答 2

1

由于上述问题,我永远无法让Recordset.AddNew工作。

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

于 2010-11-12T21:42:38.793 回答
0

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

于 2010-05-21T14:17:43.553 回答