从强类型数据集中获取一个元素
本文关键字:一个 元素 获取 强类型 数据 数据集 集中 | 更新日期: 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
即使在您的类型化数据集上,您也可以使用设计视图上的向导来创建返回单个值的查询。