3

開いてもエラーが発生しないため、接続に問題はないと思います。したがって、コマンドを実行しているときにエラーが発生すると思います。これは私のコードです:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM cars", conn);
cmd.CommandType = CommandType.Text;
int numbers = cmd.ExecuteNonQuery();

メッセージ ボックスを使用して値を表示しようとしましたnumbersが、結果は常に 0 です。cars テーブルには 5 つのレコードが含まれています。では、なぜ正しい結果が得られないのでしょうか? ...

4

5 に答える 5

4

OPの重要な部分である匿名の反対投票者へ:

メッセージ ボックスを使用して数値の値を表示しようとしましたが、結果は常に 0 です。cars テーブルには 5 つのレコードが含まれています。では、なぜ正しい結果が得られないのでしょうか? ...

OP は明らかに、すべてのテーブル データではなく、テーブル内のレコード数 (スカラー集計) を取得しようとしています。

私の答え:

これは、クエリがスカラー値ではなくテーブルを返し、間違った関数を呼び出しているためです。クエリは次のようにする必要があります。

"SELECT COUNT(*) FROM cars"

また、ExecuteNonQuery は、実際には結果が返されることを期待していません。(通常、ExecuteNonQuery を使用して挿入、更新、および削除操作を実行します。) count(*) などの単一値の結果を期待するExecuteScalarを使用する必要があります。

すべて一緒に:

OleDbCommand cmd = new OleDbCommand("SELECT count(*) FROM cars", conn);
cmd.CommandType = CommandType.Text;
int numbers = cmd.ExecuteScalar();
于 2011-10-14T16:21:50.320 に答える
1

名前が示すように、ExecuteNonQuery はクエリを作成しません。通常、挿入または更新に使用され、影響を受けるレコードの数を返します。提供したクエリの場合、ExecuteReader または DataAdapter とその Fill メソッドを使用してデータテーブルを埋める必要があります。

于 2011-10-14T16:24:46.983 に答える
1

カウントが得られる ExecuteScalar を使用してみてください。ExecuteNonQuery はクエリの結果を返しません。あなたが見ている戻り値は、ステートメントによって影響を受けた行の数を示しています。あなたの場合はゼロです。

于 2011-10-14T16:21:48.520 に答える
0

クエリを実行しているため、ExecuteNonQuery は影響を受ける行の数を返します。何も変更していないため (つまり、INSERT、UPDATE、または DELETE)、選択すると常に 0 になります。

于 2011-10-14T16:22:27.463 に答える
0

ExecuteNonQueryUPDATE、DELETE、または INSERT 操作の影響を受ける行数のみを返します。SELECT ステートメントの行数については、次を試してください。

OleDbCommand cmd = new OleDbCommand("SELECT * FROM cars", conn);
OleDbDataReader reader = cmd.ExecuteReader();

int numbers = 0;
while (reader.Read())
{
    //// other Reader-related operations here...

    numbers++;
}
于 2011-10-14T16:22:37.183 に答える