您好我正在使用返回dataTable的TableAdapter,当结果表应该有多行时可以使用它,如下所示:
MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();
但是如果我们只需要一行,那就说一个具有特定ID的项目
MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0];
如何让Adapter返回一行而不是DataTable。 我正在使用DataSet Designer向导,并为我提供了两个选项来放入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)
如果是这样,我不能在设计器生成的文件中做到!!我在哪里可以做到这一点?
由于
答案 0 :(得分:3)
在数据集设计器中创建一个新的Select语句。使用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
答案 1 :(得分:2)
我认为唯一的方法是通过索引访问数据表中的第一行,就像使用此查询一样 -
MyItemsDataSet.MyItemRow itemRow = Adapter.GetItemByID(id)[0];
您应该考虑的另一件事是转储表适配器并使用LINQ2SQL。 LINQ支持.FIRST()方法,它可以精确地执行您想要的操作。