【问题标题】:how to return single row using TableAdapter如何使用 TableAdapter 返回单行
【发布时间】:2011-01-05 13:25:54
【问题描述】:

您好,我目前正在使用返回 dataTable 的 TableAdapter,当结果表应该有不止一行时可以使用:

MyItemsDataTable myItemsDataTable = Adapter.GetAllItems();  

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

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

如何使适配器返回一行而不是 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)

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

谢谢

【问题讨论】:

    标签: c# sql-server datatable dataset datarow


    【解决方案1】:

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

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

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


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

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

    【讨论】:

    • 太好了,查询现在返回单行,但我仍然必须从 DataTable 的 [0] 索引中获取它。我们有什么方法可以添加返回行而不是 DataTable 的方法,但是使用上面的查询?
    • 右键单击数据集文件并点击查看代码。它应该打开 DatasetName.cs (NOT DatasetName.designer.cs)。在数据集中创建一个简单的方法 return GetFirstItemByID(id)[0];
    【解决方案2】:

    我相信唯一的方法是通过索引访问数据表中的第一行,就像您对这个查询所做的那样 -

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

    您应该考虑的另一件事是转储表适配器并改用 LINQ2SQL。 LINQ 支持 .FIRST() 方法,这正是您想要的。

    【讨论】:

    • 我已经这样做了,我需要替代方案。一些测试问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多