Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Имеется хранимая процедура, которая возвращает выборку из реальной таблицы БД MS SQL (в примере - Table1). Полученный в ADO набор данных разрешен к редактированию, т.е. я могу изменять значения полей, добавлять и удалять записи. Но все изменения не отправляются на сервер, а если получить набор данных с помощью выполнения того же указанного в примере простого SELECT, то все изменения данных клиентом благополучно доходят до сервера БД. Вопрос как раз и состоит в том, можно ли получить редактируемый набор данных из хранимой процедуры? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: plaintext Я знаю несколько вариантов обхода этой проблемы (например, переделать процедуру в функцию, которая вернет только ID-шники нужных записей, и вставить ее в условие отбора у селекта, который будет выполнен напрямую), но хочу разобраться, чем вызвано именно такое поведение ADO, написано ли это где-то в справке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2011, 11:05 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
Kulavert, нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2011, 12:10 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
Excel, ответ понятен, но поподробнее можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2011, 12:29 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
Kulavert, ХП возвращает "результирующий набор", и забывает о тебе. Можно сказать она работает в одну сторону. Что происходит в ХП для вызывающей стороны черный ящик. Если нужно модифицировать данные, то для этого нужно строить и использовать проекцию (view). Ссылок к сожалению не дам, просто оно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2011, 12:39 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
Kulavert, читайте о SqlDataAdapter ExcelЕсли нужно модифицировать данные, то для этого нужно строить и использовать проекцию (view). Ссылок к сожалению не дам, просто оно так.для этого нужно использовать соответствующие (sql) команды - insert, update, delete - каким образом и в каком "месте" - другой вопрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2011, 13:32 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
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). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 10:17 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
Причина найдена. Оказалось, что Recordset после открытия набора данных, возвращенного хранимой процедурой, принудительно устанавливает LockType в значение BatchOptimistic и тип курсора в значение Static, вместо запрашиваемых явно Optimistic и UseClient соответственно. Поэтому и поведение Recordset меняется, пришлось ручками в коде вызывать метод UpdateBatch для отправки изменений на сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 10:51 |
|
||
|
Хранимая процедура возвращает нередактируемый набор данных. Можно ли это исправить?
|
|||
|---|---|---|---|
|
#18+
KulavertЯ использую ADO, а не ADO.NET. Понятно. Т.е. получение метаданных (типа BASETABLENAME = Table1) из хранимой процедуры - имеет место быть? Смутно припоминается подобное неприятное (какого хрена влазить в личную/интимную жизнь хп!?) открытие, но за давностью могу и ошибаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2011, 12:03 |
|
||
|
|

start [/forum/topic.php?fid=17&gotonew=1&tid=1350907]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 392ms |

| 0 / 0 |
