powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VS2005: SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
3 сообщений из 3, страница 1 из 1
VS2005: SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
    #38565107
Oleg F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал я в базе MS SQL 2005 представление (VIEW) и делаю из неё SELECT. Затем в него же хочу сделать UPDATE.
Я рассчитывал, что SqlCommandBuilder будет автоматически генерировать UPDATE в мой VIEW, а он откуда-то узнал имя таблицы и создаёт команду UPDATE в таблицу!
Я думал скрыть от пользователя таблицу, дать ему определённые колонки на просмотр, и права UPDATE дать на VIEW (но не на таблицу), но не тут-то было.

Через трассировщик SQL-запросов (SQL Server Profiler) с удивлением наблюдаю,
что SqlCommandBuilder создаёт команду UPDATE к таблице.
Естественно, возникает ошибка, так как прав на UPDATE таблицы я не давал
(я дал права на VIEW).

См. ниже какие запросы выполняются на сервере (первый ADO.NET создал из моей команды SELECT, а второй создал SqlCommandBuilder).
Видно, что SELECT из asktex.PATENTS_VIEW1, а UPDATE в таблицу asktex.PATENTS.

Код: sql
1.
2.
3.
4.
exec sp_executesql N' SET FMTONLY OFF; SET NO_BROWSETABLE ON; SET FMTONLY ON;
select sys_id_file, sys_rec_in_file, relevant, ready, error_cnt, subjects  from asktex.PATENTS_VIEW1 where sys_id_file = @sys_id_file order by sys_rec_in_file',N'@sys_id_file int',@sys_id_file=228032

exec sp_executesql N'UPDATE [asktex].[PATENTS] SET [relevant] = @p1 WHERE (([sys_id_file] = @p2) AND ([sys_rec_in_file] = @p3))',N'@p1 bit,@p2 int,@p3 int',@p1=1,@p2=228032,@p3=420



Отсюда вопросы.
1. Непонятно, откуда SqlCommandBuilder узнал имя таблицы
(в моей программе оно нигде не упоминается).
2. Можно ли заставить его генерить UPDATE к VIEW, а не к таблице?

Очевидно, что в моём случае можно дать права пользователям на UPDATE на таблицу PATENTS и успокоиться
(или отказаться от использования SqlCommandBuilder, т.е. создавать запросы вручную),
но хочется понять в чём дело и можно ли заставить SqlCommandBuilder выполнять UPDATE туда же, откуда выполнен SELECT.
...
Рейтинг: 0 / 0
VS2005: SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
    #38565116
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg F,
А почему вы решили, что View вообще двусторонний?
Первый раз слышу про возврат данных в базу через View.
:-)
Всегда рассматривал View как таблицу только для чтения....
...
Рейтинг: 0 / 0
VS2005: SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
    #38565127
Фотография Ken@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129,

Печаль, но это так, можно и представление апдейтить и вставлять, даже со сложной бизнес логикой
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / VS2005: SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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