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

时间:2013-03-01 12:34:11

标签: c# ado.net dataset strongly-typed-dataset

我刚学会使用强类型数据集和存储过程,而且事情进展顺利,除了一个小问题。我可以弄清楚如何从数据表中获取我的数据并考虑到它的事实datable只有一列,其中有一行。这就是我目前所拥有的:

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上进行itarating的原因,因为我只有一个int类型的元素,我只想检索它。

有没有办法通过编写类似这样的东西来获得该元素:

bookCountDataTable.TotalNumberOfBooks

3 个答案:

答案 0 :(得分:2)

  

因为我只有一个int类型的元素,我只想   检索那个。

使用索引访问它,然后像:

return bookCountDataTable[0].TotalNumberOfBooks

但是之前应检查表的行数

从你的foreach循环看,如果那里会有多行,那么将返回最后一行TotalNumberofBooks

答案 1 :(得分:2)

我相信你可以这样做:

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

答案 2 :(得分:1)

如果你确定你将拥有一个单独的元素,你可以做这样的事情

int totalNumberOfBooks = bookCountDataTable[0].TotalNumberOfBooks;

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

执行此操作

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