Сброс набора записей ADODB в XML, затем обратно в набор записей, затем сохранение в БД - PullRequest
0 голосов
/ 21 мая 2010

Я создал файл XML с использованием метода .Save() набора записей ADODB следующим образом.

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.

Поставщик Microsoft OLE DB для драйверов ODBC, ошибка '80040e21'

Многошаговая операция OLE DB вызвала ошибки. Проверьте каждое значение состояния OLE DB, если оно доступно. Никакой работы не было сделано.

Может кто-нибудь сказать мне, что я делаю неправильно или предложить лучший способ скопировать данные, загруженные из XML, в другую базу данных?

Обновление частично решено

Получается, что моя ошибка вызвана попыткой установить значение поля Identity . Если я временно изменю это поле на , а не на , это будет идентификатор, все данные будут вставлены идеально.

Теперь следующий вопрос

Как я могу временно отключить свойство Identity этого поля, а затем снова включить его, когда я закончу с моими обновлениями?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2010

Мне так и не удалось заставить Recordset.AddNew работать из-за вышеуказанной проблемы.

В качестве обходного пути я делаю SET IDENTITY_INSERT table ON, выполняя INSERT sql,и SET IDENTITY_INSERT table OFF.

0 голосов
/ 21 мая 2010

После прочтения XML-файла установите для свойства соединения набора записей новое соединение с базой данных, а затем вызовите UpdateBatch.

...