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 を作成するために最初に照会したテーブルとまったく同じ構造を持っていると想定できます。

新しいレコードセットを作成し、新しいレコードセットにすべての行を追加するために使用することから始めまし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

resしかし、これは私が最初に値を からに代入しようとしたときに爆発しoutResます。

Microsoft OLE DB Provider for ODBC Drivers エラー '80040e21'

複数ステップの OLE DB 操作でエラーが発生しました。利用可能な場合は、各 OLE DB ステータス値を確認します。作業は行われませんでした。

XML からロードされたデータを別のデータベースにコピーするためのより良い方法を教えてください。

更新、部分的に解決

したがって、私のエラーは、Identityフィールドの値を設定しようとしたことが原因であることがわかりました。そのフィールドを ID に一時的に変更するとすべてのデータが完全に挿入されます。

さて、フォローアップの質問

そのフィールドの Identity プロパティを一時的にオフにし、更新が完了したら再びオンにするにはどうすればよいですか?

4

2 に答える 2

1

上記の問題のため、Recordset.AddNewを機能させることができませんでした。

回避策として、SET IDENTITY_INSERT table ONINSERT sql を実行して、SET IDENTITY_INSERT table OFF.

于 2010-11-12T21:42:38.793 に答える
0

XML を読み戻した後、レコードセットの接続プロパティを新しいデータベース接続に設定し、UpdateBatch を呼び出します。

于 2010-05-21T14:17:43.553 に答える