powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
9 сообщений из 9, страница 1 из 1
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37087690
Kulavert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Имеется хранимая процедура, которая возвращает выборку из реальной таблицы БД MS SQL (в примере - Table1). Полученный в ADO набор данных разрешен к редактированию, т.е. я могу изменять значения полей, добавлять и удалять записи. Но все изменения не отправляются на сервер, а если получить набор данных с помощью выполнения того же указанного в примере простого SELECT, то все изменения данных клиентом благополучно доходят до сервера БД.
Вопрос как раз и состоит в том, можно ли получить редактируемый набор данных из хранимой процедуры?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER PROCEDURE [dbo].[Proc1]
AS
BEGIN
  //...
  // много кода
  //...
  SELECT z.*
  FROM Table1 z
  WHERE //...Условия...
END
Я убрал все ненужное из кода процедуры, потому что данная проблема имеет место даже если в процедуре будет всего одна строчка:
Код: plaintext
SELECT * FROM Table1
Может надо какие-то свойства (Properties) набора данных установить в нужные значения, например Update Criteria, Unique Table, Resync Command? Но я провел эксперимент: открываю два одинаковых набора данных (указанный SELECT), но один получен из выполненной процедуры, а другой простым выполнением селекта, и сравниваю у них все значения Properties. Все значения одинаковые, но при этом набор из процедуры не сохраняет изменения на сервере...

Я знаю несколько вариантов обхода этой проблемы (например, переделать процедуру в функцию, которая вернет только ID-шники нужных записей, и вставить ее в условие отбора у селекта, который будет выполнен напрямую), но хочу разобраться, чем вызвано именно такое поведение ADO, написано ли это где-то в справке...
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37087880
Excel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kulavert,

нет.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37087943
Kulavert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Excel,
ответ понятен, но поподробнее можно?
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37087981
Excel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kulavert,

ХП возвращает "результирующий набор", и забывает о тебе.
Можно сказать она работает в одну сторону. Что происходит в ХП для вызывающей стороны черный ящик.

Если нужно модифицировать данные, то для этого нужно строить и использовать проекцию (view).

Ссылок к сожалению не дам, просто оно так.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37088194
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kulavert,

читайте о SqlDataAdapter

ExcelЕсли нужно модифицировать данные, то для этого нужно строить и использовать проекцию (view).
Ссылок к сожалению не дам, просто оно так.для этого нужно использовать соответствующие (sql) команды - insert, update, delete - каким образом и в каком "месте" - другой вопрос
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37089896
Kulavert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Excel,

вашу логику я понял, не сочтите нижесказанное за попытку спора, но!
Провайдер для MS SQL Server возвращает вместе с набором данных еще и метаданные, в том числе и для всех колонок набора:
BASECOLUMNNAME = Table1ID;
BASETABLENAME = Table1;
BASECATALOGNAME = TestDB;
BASESCHEMANAME = ;
KEYCOLUMN = False;
ISAUTOINCREMENT = True;
RELATIONCONDITIONS = ;
CALCULATIONINFO = ;
OPTIMIZE = False;
По ним ADO определяет, как изменять данные на сервере.
В данном случае я проверил: значения указанных выше свойств абсолютно одинаковы для одного и того же поля рассматриваемых в моем вопросе двух датасетов.


LR,

Я использую ADO, а не ADO.NET. К сожалению, не нашел специальной ветки форума по ADO, эта ветка наиболее подходит по смыслу.
SQL команды insert, update, delete при работе с ADO использовать на прикладном уровне необязательно (см. ответ пользователю Excel).
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37089965
Kulavert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причина найдена.
Оказалось, что Recordset после открытия набора данных, возвращенного хранимой процедурой, принудительно устанавливает LockType в значение BatchOptimistic и тип курсора в значение Static, вместо запрашиваемых явно Optimistic и UseClient соответственно. Поэтому и поведение Recordset меняется, пришлось ручками в коде вызывать метод UpdateBatch для отправки изменений на сервер.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37090240
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KulavertЯ использую ADO, а не ADO.NET.
Понятно. Т.е. получение метаданных (типа BASETABLENAME = Table1) из хранимой процедуры - имеет место быть? Смутно припоминается подобное неприятное (какого хрена влазить в личную/интимную жизнь хп!?) открытие, но за давностью могу и ошибаться.
...
Рейтинг: 0 / 0
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
    #37100363
Kulavert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,

Да, всё именно так.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]