2010-01-15 7 views
4

Привет Я в настоящее время использую TableAdapter, который возвращает DataTable, который прекрасно использовать, когда результат таблица должна иметь более чем одну строку, как:как вернуть одну строку с помощью TableAdapter

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems(); 

но если нам нужен только один строка как результат, скажем, элемент, который имеет определенный идентификатор

MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0]; 

как я могу сделать адаптер для возврата на одну строку вместо DataTable. Я использую DataSet мастера конструктора и дает мне два варианта ввода в ЗЕЬЕСТ

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) 

Если это так, я не могу сделать это в конструкторе создается файл !! где я могу это сделать?

Благодаря

ответ

3

Создайте новый оператор Select в Designer Dataset Designer. Используйте Select which return rows. Затем используйте следующий запрос:

SELECT TOP 1 * from 
FROM FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID) 

Сохранить этот метод, как GetFirstItemByID() или что-то подобное.


Для Googlers там, многие из баз данных не-MS (., Например, MySQL) будет использовать следующий синтаксис вместо:

SELECT * from 
FROM FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID) 
LIMIT 1 
+0

Отлично, запрос теперь возвращает одну строку, но мне все равно нужно извлечь его из индекса [0] DataTable. Любой способ добавить метод, который возвращает строку вместо DataTable, но используя указанный выше запрос? –

+1

Щелкните правой кнопкой мыши файл набора данных и нажмите * код просмотра *. Он должен открыть 'DatasetName.cs' (* NOT *' DatasetName.designer.cs'). Создайте новый метод в наборе данных, который просто возвращает 'GetFirstItemByID (id) [0];' –

+0

Спасибо, помощник, оказал большую помощь –

2

Я считаю, что единственный способ, чтобы получить доступ к первой строке в таблице данных по индексу, как вы делаете с этим запросом -

MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0]; 

Другая вещь, которую вы должны рассмотреть, является демпинг а также использовать LINQ2SQL. LINQ поддерживает метод .FIRST(), который делает именно то, что вы хотите.

+0

Я уже делал это, мне нужна альтернатива. Некоторые проблемы с тестированием. –