Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Последовательные курсоры «только для чтения»

Последовательный курсоры «только для чтения» которые в предыдущих версиях SQL Server назывались последовательными курсорами. Это самые быстрые курсоры, которые, однако, нельзя обновлять.

В следующем примере показано, как получить последовательный курсор «только для чтения» при помощи ADO .NET:

cmd.CommandText = "Select * from tablename"; SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.None);

Курсоры «только для чтения» нельзя создавать для запроса, который возвращает столбцы, доступные только для чтения, поскольку все курсоры SQL Server обновляются внутренними механизмами. SQL Server не может обновлять столбцы только с возможностью чтения, возвращаемые в SqlCeResultSet. Соответственно, произойдет сбой с ошибкой «Не удаётся создать обновляемый курсор для запроса, поскольку отсутствует обновляемый столбец».

Курсоры, управляемые набором ключей

В SQL Server курсор, управляемый набором ключей, является прокручиваемым и обновляемым. Курсоры, управляемые набором ключей, контролируются набором физических идентификаторов, известным как набор ключей. Ключевой набор основывается на всех строках, которые соответствовали инструкции SELECT при открытии курсора. Ключевой набор встраивается во временную таблицу при открытии курсора. Его членство определяется при выполнении запроса.

В SQL Server курсор, управляемый набором ключей, использует в качестве ключей набора уникальные идентификаторы, которые служат закладками, и обозначают места логического хранения значений в таблице.

Хотя курсор, управляемый набором ключей, является чувствительным к определённым изменениям, его чувствительность ниже, чем у других курсоров. Например, вставка вне курсора видна не будет, тогда как вставки в его пределах в итоге окажутся видны. В этом случае рекомендуется закрывать и повторно открывать курсор или использовать один из последовательных курсоров.

Поскольку SQL Server использует закладки для определения набора ключей, все изменения данных в строках, включенных в набор ключей, становятся видны при использовании курсора. Это справедливо как для изменений, сделанных внутри курсоров, и для изменений вне их. Любые удаления в курсоре набора ключей, как внутри него, так и за его пределами, приводят к тому, что при попытке получения строка будет считаться удалённой.

В следующем примере показано, как получить курсор, управляемый набором ключей, при помощи ADO .NET:

cmd.CommandText = "Select * from tablename"; SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);

Работа с объединениями

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

Если набор ключей используется для заполнения элемента управления, обновляемого пользователем, например объекта DataGrid, возможно, пользователи предпримут попытки обновить значения в элементе управления, однако такое обновление выполнить не удастся. Разрабатывая приложение, где DataGrid используется для отображения данных в объединённых столбцах, убедитесь, что объединенные столбцы в DataGrid доступны только для чтения.

На выбор типа курсора влияют следующие факторы:

  • размер результирующего набора;

  • процент потенциально необходимых данных;

  • производительность открытия курсора;

  • потребность в операциях курсора, например прокрутке или обновлениях позиций;

  • уровень видимости изменений данных, внесенных другими пользователями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]