如何使用TableAdapter返回单行数据

6

您好,我目前正在使用返回数据表的TableAdapter,当结果表应该有多行时,这是很好的选择,比如:

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  

但是如果我们只需要一行结果,比如一个具有特定ID的项目

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

如何使适配器返回一行而不是整个数据表。我正在使用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个回答

3

我认为唯一的方法是通过索引访问数据表中的第一行,就像您使用这个查询语句一样 -

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

另外一个你应该考虑的事情是放弃使用表适配器,改用LINQ2SQL。LINQ支持.FIRST()方法,它可以精确地实现你想要的功能。

我已经在做这件事了,我需要其他的解决方案。测试遇到了一些问题。 - Asad

3
在数据集设计器中创建一个新的选择语句。使用“选择返回行”选项。然后使用以下查询:
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

很好,查询现在返回单行,但我仍然需要从DataTable的[0]索引中获取它。有没有办法添加一个返回行而不是DataTable的方法,但使用上述查询? - Asad
2
右键单击数据集文件,然后点击“查看代码”。它应该打开 DatasetName.cs不是 DatasetName.designer.cs)。在数据集中创建一个新方法,只需执行 return GetFirstItemByID(id)[0]; - BlueRaja - Danny Pflughoeft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接