1

今日、ストアド プロシージャと一緒に強く型付けされたデータセットを使用する方法を学びましたが、1 つの小さな問題を除いて、非常にうまくいっています。その中に1つの行を持つ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型の要素が1つしかなく、それを取得したいだけなので、反復する理由がわからないことです。

このようなものを書くことでその要素を取得する方法はありますか:

bookCountDataTable.TotalNumberOfBooks
4

3 に答える 3

2

私はあなたがこのようなことをすることができると確信しています:

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

int型の要素が1つだけあり、それを取得したいだけだからです。

インデックスを使用してアクセスし、次のようにします。

return bookCountDataTable[0].TotalNumberOfBooks

ただし、前にテーブル の行数を確認する必要があります。

foreachループから、そこに複数の行がある場合は、最後の行TotalNumberofBooksが返されるように見えます。

于 2013-03-01T12:36:54.023 に答える
1

あなたが単一の要素を持っていると確信しているなら、あなたはこのようなことをすることができます

int totalNumberOfBooks = bookCountDataTable[0].TotalNumberOfBooks;

いずれの場合も、単一の値を取得するためにデータセットを使用するべきではありません。これを行うためのより良い方法がありますSqlCommand.ExecuteScalar

入力したデータセットでも、デザインビューのウィザードを使用して、単一の値を返すクエリを作成できます。

于 2013-03-01T12:38:37.030 に答える