1

我今天刚学会使用强类型数据集和存储过程,一切进展顺利,除了一个小问题。考虑到数据表有只有一列有一行。这是我到目前为止所拥有的:

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
4

3 回答 3

2

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

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

return bookCountDataTable[0].TotalNumberOfBooks

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

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

于 2013-03-01T12:36:54.023 回答
2

我相信你可以做这样的事情:

if(bookCountDataTable.Rows.Count > 0)
{
     totalNumberOfBooks = Convert.ToInt32(bookCountDataTable.Rows[0]["TotalNumberOfBooks"]);
}
于 2013-03-01T12:37:37.160 回答
1

如果你确定你会有一个元素,你可以做这样的事情

int totalNumberOfBooks = bookCountDataTable[0].TotalNumberOfBooks;

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

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

于 2013-03-01T12:38:37.030 回答