![]() |
|
Модераторы: gambit |
![]()
|
|
| Moid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Создал в SQL Server свой View, который отображает данные из нескольких таблиц + виртуальные поля созданные запросом(такие как Sum и Count)
Как мне отобразить его в DataGridView? Или может я выбрал не правильный подход... -------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Moid, так же, как и таблицу. Не считая некоторых нюансов, на уровне sql-запроса View равносильно таблице.
|
|||
|
||||
| Moid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Idsa, Не совсем понятно...
Как вариант рассмотрел следующее, тогда и использование вью опадает: тот запрос что выполняется во View выполнить и заполнить свой DataTable, затем привязать его к DataGridView. -------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Вам не нужно думать о том, какой запрос выполняется во View. Используйте ее как обычную таблицу. |
|||
|
||||
| Moid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Еще момент: можно ли в запрос View подставить програмно значения переменных, как к примеру это можно сделать при заполнении таблицы методами из xsd.
Если нет, то в принципе тогда и отпадает нужда использовать View, а формировать запрос через строку. -------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Нет, нельзя. Используйте голые запросы или хранимые процедуры. |
|||
|
||||
| Moid |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 396 Регистрация: 27.3.2006 Репутация: нет Всего: 3 |
Idsa, спасибо... тогда тема закрыта.
-------------------- "Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн |
|||
|
||||
| MasterOfCode |
|
||||||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
В чем проблемма, VIEW эта та же таблица.
и потом так:
или я что то не так понял? Это сообщение отредактировал(а) MasterOfCode - 19.11.2008, 14:10 -------------------- ![]() |
||||||
|
|||||||
| Idsa |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
MasterOfCode, http://databases.aspfaq.com/database/shoul...d-function.html
Т. е. мы не может сделать select from SomeView(@param1, @param2...). Допустим, нам нужно сделать View, выбирающую определенный диапазон значений.
Такой запрос во View не прокатит. Получается, отсеивать значения нужно во внешнем относительно View запросе, как в Вашем примере. Во-первых, это неудобно. Гораздо удобнее воспользоваться table-valued function:
Во-вторых, возможны проблемы с производительностью: ведь мы сначала считываем все значения View, а только потом отбираем нужные. Хотя, наверное, современные оптимизаторы запросов это дело красиво разруливают. Если предыдущее утверждение насчет производительности, скорее всего, неактуально... есть еще один вариант. Зачастую View используются для того, чтобы ограничить доступ пользователей к таблицам, атрибутам и т. д. Допустим, DBA хочет, чтобы пользователь мог получить информацию только по одному пользователю. Через вьюху этого не сделаешь, т. к. она возвращает все данные. А если в таблице 20 миллионов записей? Так неопытный "писун" прикладного приложения может повесить сервак, если не добавит надлежащих ограничений в where. Таких примеров можно напридумывать кучу (фантазия у меня - дай Бог Это сообщение отредактировал(а) Idsa - 19.11.2008, 14:51 |
||||||
|
|||||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
немного не понял... это как по одному пользователю? -------------------- ![]() |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Это я говорил о воображаемой таблице Users, к которой используется запрос:
|
|||
|
||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Ну дак понятно. Для этого и существует возможность фильтровать вьюшку в запросе
У нас тут почти все на вьюшках построенно. И работает я скажу без потери производительности, хотя я не проверял, но не скажу что долго. Что это за база такая которая повиснет при выборе 20 млн записей? какая нибудь настольная, но если у тебя есть 20млн записей, то имхо нужно что то по серьезнее использовать -------------------- ![]() |
|||
|
||||
| Idsa |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Насчет производительности - это все догадки и, скорее всего, неверные.
Но в любом случае отсутствие возможности передавать во View параметры не дает реализовать некоторые типы View. Допустим, нужно вернуть пользователей, зарегистрированных с одной даты по другую. Имея View, возвращающую всех пользователей, пишем запрос:
Теперь посмотрим, как это можно реализовать черзе table-valued function, внутрь которой уже заложена логика по отбору пользователей по дате регистрации:
Удобнее, неправда ли? Это я все к тому, что порой действительно удобнее инкапсулировать логику отбора в table-valued function, нежели приписывать ее к внешнему where к View. Это сообщение отредактировал(а) Idsa - 20.11.2008, 19:50 |
||||
|
|||||
| MasterOfCode |
|
|||
|
elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Я бы использовал between в условии. Только визуальнее. А внутри у этой функции тот же самый between Если бы view можно было принимать параметры - это было бы не view. Если тебе удобнее писать так. То не кто не запрещает. Мне вот интересно, table-valued function можно связать join'ом например с другими таблицами? -------------------- ![]() |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |