从强类型数据集中获取一个元素

本文关键字:一个 元素 获取 强类型 数据 数据集 集中 | 更新日期: 2023-09-27 18:01:48

我今天刚学会使用强类型数据集和存储过程,除了一个小问题之外,一切都很顺利。考虑到数据表只有一列和一行,我可以弄清楚如何通过迭代从数据表中获取数据。这是我目前所看到的:

var bookCountAdapter = new CountBooksTableAdapter();
var bookCountDataTable = new BooksAndCategoriesDataSet.CountBooksDataTable();
bookCountAdapter.Fill(bookCountDataTable);
int totalNumberOfBooks = 0;
foreach (BooksAndCategoriesDataSet.CountBooksRow row in bookCountDataTable) {
     totalNumberOfBooks = row.TotalNumberOfBooks;
}
return totalNumberOfBooks;

数据集使用的存储过程为:

CREATE PROCEDURE [dbo].[CountBooks]
AS
SELECT COUNT(*) FROM Books

现在我当前的代码工作得很好。问题是我看不出在bookCountDataTable上迭代的原因,因为它只有一个int类型的元素,我只想检索它。

有没有一种方法,我可以通过写类似这样的东西来获得这个元素:

bookCountDataTable.TotalNumberOfBooks

从强类型数据集中获取一个元素

我相信你可以这样做:

if(bookCountDataTable.Rows.Count > 0)
{
     totalNumberOfBooks = Convert.ToInt32(bookCountDataTable.Rows[0]["TotalNumberOfBooks"]);
}

因为里面只有一个int类型的元素,而且我只想检索。

用索引访问它,然后像这样:

return bookCountDataTable[0].TotalNumberOfBooks

但是您应该在之前检查表的行计数

从你的foreach循环看起来,如果有多行在那里,那么最后一个的TotalNumberofBooks将返回。

如果你确定只有一个元素你可以这样做

int totalNumberOfBooks = bookCountDataTable[0].TotalNumberOfBooks;

在任何情况下,您都不应该使用数据集来检索单个值。有更好的方法来做到这一点,SqlCommand.ExecuteScalar

即使在您的类型化数据集上,您也可以使用设计视图上的向导来创建返回单个值的查询。