Поделиться через


Обновление данных в курсорах SQL Server

При выборке и обновлении данных с помощью курсоров SQL Server приложение потребителя поставщика OLE DB для собственного клиента SQL Server связано теми же условиями и ограничениями, что и любое другое клиентское приложение.

В управлении параллельным доступом к данным участвуют только строки курсоров SQL Server. Когда потребитель запрашивает изменяемый набор строк, управление параллелизмом контролируется свойством DBPROP_LOCKMODE. Чтобы изменить уровень управления параллельным доступом, потребитель устанавливает свойство DBPROP_LOCKMODE до того, как открывает набор строк.

Уровни изоляции транзакции могут вызвать значительные задержки при позиционировании строк, если клиентское приложение позволяет транзакциям долгое время оставаться открытыми. По умолчанию поставщик OLE DB для собственного клиента SQL Server использует уровень изоляции READ COMMITTED, который задает свойство DBPROPVAL_TI_READCOMMITTED. Поставщик OLE DB для собственного клиента SQL Server поддерживает изоляцию чтения «грязных» данных, если параллелизм набора строк предназначен только для чтения. Поэтому потребитель может запросить более высокий уровень изоляции в изменяемом наборе строк, но не может успешно запросить более низкий уровень.

Режимы немедленного и отложенного обновления

В режиме немедленного обновления каждый вызов метода IRowsetChange::SetData приводит к обмену данными с SQL Server. Если потребитель выполняет несколько изменений в одной строке, эффективнее будет представить все изменения в одном вызове функции SetData.

В режиме отложенного обновления обмен данными с SQL Server осуществляется для каждой строки, указанной параметрами cRows и rghRows метода IRowsetUpdate::Update.

В каждом режиме обмен данными представляет отдельную транзакцию, если для набора строк отсутствует открытый объект транзакции.

При использовании метода IRowsetUpdate::Update поставщик OLE DB для собственного клиента SQL Server пытается обработать каждую указанную строку. Ошибка, происходящая из-за недопустимых данных, длины или значений состояния для каждой строки, не останавливает эту обработку. Можно изменить все строки, участвующие в обновлении, или ни одной. Потребитель consumer должен изучить возращенный массив prgRowStatus, чтобы определить ошибку для каждой конкретной строки, если поставщик OLE DB для собственного клиента SQL Server возвращает DB_S_ERRORSOCCURRED.

Потребитель не должен предполагать, что строки обрабатываются в каком-то определенном порядке. Если потребителю требуются упорядоченная обработка данных нескольких строк, он должен установить этот порядок в логике приложения и открыть транзакцию, содержащую процесс упорядочивания.

См. также

Основные понятия