powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
3 сообщений из 3, страница 1 из 1
SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
    #38565092
Oleg F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал я в базе представление (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
SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
    #38565099
Oleg F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить, что речь идёт о Visual Studio 2005 и .NET 2.0.
...
Рейтинг: 0 / 0
SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
    #38566076
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ рассчитывал, что SqlCommandBuilder будет автоматически генерировать UPDATE в мой VIEW, а он откуда-то узнал имя таблицы и создаёт команду UPDATE в таблицу!

Ну, видимо, разработчики ADO.NET решили не заморачиваться с проверками, чего там у тебя в select, и сразу тянут исходные таблицы из метаданных обновляемого поля ( см. INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.VIEW_COLUMN_USAGE ).

Так что указывай UpdateCommand ручками.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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