如何使用TableAdapter返回单行

时间:2010-01-15 15:02:10

标签: c# sql-server datatable dataset datarow

您好我正在使用返回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)

如果是这样,我不能在设计器生成的文件中做到!!我在哪里可以做到这一点?

由于

2 个答案:

答案 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()方法,它可以精确地执行您想要的操作。