Реферат: Работа с объектами большого объема в MS SQL и ADO
'Создание записи
Dim dr As DataRow = ds.Tables("UState").NewRow()
dr("username") = UserName
dr("b_state") = b
'Добавление записи
ds.Tables("UState").Rows.Add(dr)
Else
'Обновление записи
Dim dr As DataRow = ds.Tables("UState").Rows(0)
dr("b_state") = b
End If
'Изменения записываем в базу
da.Update(ds, "UState")
End Sub
Надо сказать, что этот способ будет работать, только если в таблице имеется первичный ключ. В моем случае, логичнее всего он смотрится на поле username. При отсутствии ключа в момент выполнения команды Update вы получите следующую ошибку:
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information. |
В документации по Oracle утверждается, что обновление данных лучше производить в явных транзакциях.
ПРИМЕЧАНИЕ По умолчанию соединение открывается в режиме неявной транзакции, в котором транзакция начинается в момент выполнения первой команды после окончания предыдущей транзакции. Этот режим аналогичен установке SET IMPLICIT_TRANSACTIONS ON в MS SQL Server. |
Это связано с тем, что транзакция, в контексте которой производится обновление, автоматически подтверждается в момент выполнения команды Update. Так что если вы затем захотите отменить изменения – это вам так просто не удастся сделать. Проблема решается с помощью объекта Transaction, пример использования которого, как и пример сохранения больших данных с помощью хранимых процедур, можно найти по адресу http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q322796.
Ну вот, пожалуй, и все. Буду рад, если эта статья помогла вам в работе с большими объектами.