Я новичок в ADO.net, и у меня возникла эта проблема:
Предположим, у меня есть две таблицы в базе данных SQL Server 2005 со следующими столбцами:
[Заказы]
- OrderID
- OrderDate
- ShopID
- TotalAmount
- TotalTaxAmount
- и т. Д. *
[OrdersDetails]
- OrderID
- ShopID
- ItemID
- Количество
- Сумма
- TaxAmount
- и т. Д.
Я запустил приложение WinForms, чтобы начать работу.В этой форме пользователь может выбрать список магазинов и диапазон дат, чтобы увидеть все заказы из этого магазина.
Я добавил источник данных из Visual Studio, выбрал таблицу Orders и OrdersDetails и перетащил иудалил таблицы Orders и связанные с ними OrdersDetails в форму как DataGridViews.
Когда я выбираю строку из DataGridView Orders, я действительно вижу соответствующие Детали Orders во втором DataGridView, как я хотел.У меня были связи внутри этой базы данных, и ADO.net перехватил их и отразил в наборе данных.
Затем я добавил метод в свой типизированный набор данных для получения данных по столбцам OrderDate и ShopID.Поскольку таблица OrdersDetails не имеет столбца OrderDate, я мог отфильтровать его только по ShopID.
Проблема заключается в том, что получение записей из OrdersDetails занимает много времени, так как в него будет извлечено больше строк, чем необходимоDataTable для OrdersDetails.Проблема в том, что я могу фильтровать только строки из таблицы OrderDetails по ShopID, который возвращает слишком много записей из базы данных.
Очевидно, ADO.net может соответствующим образом отфильтровать их на стороне клиента с помощьюиспользуя отношение OrderID, но было бы гораздо разумнее извлекать только те строки из OrdersDetails, которые мне действительно нужны.
Я изменил свои запросы, получая данные из второй таблицы, чтобы добавить OrderDate, используя соединение,так что я могу фильтровать по дате, когда я получаю данные из базы данных ... однако, это вызывает проблемы, когда я пытаюсь обновить свои изменения из-за этого внешнего столбца ...
Я считаю, что должно быть легкоспособ обойти это, не так ли?
Большое спасибо заранее.