2010-05-21 95 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

相關問題