Привет я в настоящее время использую TableAdapter, который возвращает таблицу данных, которая прекрасна для использования, когда таблица результата должна иметь больше чем одну строку как:
MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();
но если нам нужна только одна строка, в результате говорят, что объект, который имеет конкретный идентификатор
MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0];
как я могу сделать Адаптер для возврата одной строки вместо DataTable. Я использую мастер Разработчика DataSet и даю мне две опции для включения оператора SELECT
Use SQL statements --> Select which return rows
(returns one or many rows)
Use SQL statements --> Select which returns a single value rows
(returns a single value)
и использование подобного запроса
SELECT * from
FROM FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
Я должен переопределить этот метод или добавить новый?
public virtual MyItemsDataSet.MyItemsDataTable GetItemByID(int ITEM_ID)
вероятно, что-то как
public virtual MyItemsDataSet.MyItemRow GetItemByID(int ITEM_ID)
Если так, я не могу сделать этого в сгенерированном файле разработчика!! где я могу сделать это?
Спасибо
Создайте новый оператор выбора в дизайнере набора данных. Используйте Выберите, какие возвратные строки
. Затем используйте следующий запрос:
SELECT TOP 1 * from
FROM FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
Сохранить этот метод как getFirstitembyId ()
или что-то подобное.
Для гугуры там многие неживые базы данных (например, MySQL) будут использовать следующий синтаксис вместо этого:
SELECT * from
FROM FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
LIMIT 1
Я считаю, что единственный способ - получить доступ к первому ряду в таблице данных через индекс, поскольку вы делаете с этим запросом -
MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0];
Другое, что вы должны рассмотреть, - это сброс таблицы адаптеров и использует вместо этого Linq2SQL. LINQ поддерживает метод .first (), который имеет именно то, что вы хотите.