如何使用TableAdapter返回单行

Asa*_*sad 5 c# sql-server datatable datarow dataset

嗨我目前正在使用返回dataTable的TableAdapter,当结果表应该有多个行时可以使用它,如:

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  
Run Code Online (Sandbox Code Playgroud)

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

MyItemsDataSet.MyItemRow  itemRow = Adapter.GetItemByID(id)[0];  
Run Code Online (Sandbox Code Playgroud)

如何让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) 
Run Code Online (Sandbox Code Playgroud)

并使用类似的查询

SELECT * from
FROM  FOOD_ITEMS
WHERE (ITEM_ID = @ITEM_ID)
Run Code Online (Sandbox Code Playgroud)

我是否需要覆盖此方法或添加新方法?

public virtual MyItemsDataSet.MyItemsDataTable  GetItemByID(int ITEM_ID)
Run Code Online (Sandbox Code Playgroud)

可能是这样的

public virtual MyItemsDataSet.MyItemRow GetItemByID(int ITEM_ID)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Blu*_*eft 4

在数据集设计器中创建新的 Select 语句。使用Select which return rows。然后使用以下查询:

SELECT TOP 1 * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)
Run Code Online (Sandbox Code Playgroud)

将此方法另存为GetFirstItemByID()或类似的方法。


对于 Google 用户来说,许多非 MS 数据库(例如 MySQL)将使用以下语法:

SELECT * from 
FROM  FOOD_ITEMS 
WHERE (ITEM_ID = @ITEM_ID)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

  • 右键单击数据集文件并点击*查看代码*。它应该打开“DatasetName.cs”(*不是*“DatasetName.designer.cs”)。在数据集中创建一个新方法,该方法只执行“return GetFirstItemByID(id)[0];” (2认同)