我刚学会使用强类型数据集和存储过程,而且事情进展顺利,除了一个小问题。我可以弄清楚如何从数据表中获取我的数据并考虑到它的事实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
答案 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
即使在您键入的数据集上,您也可以使用设计视图上的向导来创建一个返回单个值的查询。