|
SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
|
|||
---|---|---|---|
#18+
Создал я в базе представление (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.
Отсюда вопросы. 1. Непонятно, откуда SqlCommandBuilder узнал имя таблицы (в моей программе оно нигде не упоминается). 2. Можно ли заставить его генерить UPDATE к VIEW, а не к таблице? Очевидно, что в моём случае можно дать права пользователям на UPDATE на таблицу PATENTS и успокоиться (или отказаться от использования SqlCommandBuilder, т.е. создавать запросы вручную), но хочется понять в чём дело и можно ли заставить SqlCommandBuilder выполнять UPDATE туда же, откуда выполнен SELECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 19:23 |
|
SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
|
|||
---|---|---|---|
#18+
Забыл добавить, что речь идёт о Visual Studio 2005 и .NET 2.0. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2014, 19:26 |
|
SqlCommandBuilder в C# генерит странный UPDATE - не туда, откуда сделан SELECT
|
|||
---|---|---|---|
#18+
авторЯ рассчитывал, что SqlCommandBuilder будет автоматически генерировать UPDATE в мой VIEW, а он откуда-то узнал имя таблицы и создаёт команду UPDATE в таблицу! Ну, видимо, разработчики ADO.NET решили не заморачиваться с проверками, чего там у тебя в select, и сразу тянут исходные таблицы из метаданных обновляемого поля ( см. INFORMATION_SCHEMA.COLUMNS, INFORMATION_SCHEMA.VIEW_COLUMN_USAGE ). Так что указывай UpdateCommand ручками. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2014, 13:55 |
|
|
start [/forum/topic.php?fid=17&gotonew=1&tid=1349843]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
132ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 492ms |
0 / 0 |