2

データ アダプタを使用してテーブルの合計行数を取得しようとしていますが、行数は常に 1 を返します。リーダーを使用すると、正確な数が得られます。dataAdapter を使用したいと思います。

これが私のコードです:

public double GetRowNumber()
    {
        using (OleDbConnection con = new OleDbConnection(someConnectionString))
        {
            con.Open();
       String cmdString = "SELECT COUNT (*) FROM " + "[" + Table +"]" 

            OleDbDataAdapter db = new OleDbDataAdapter(cmdString, dbConn);
            DataTable dt = new DataTable();
            db.Fill(dt);
            return dt.Rows.Count;

        }
    }

何か案は?

4

3 に答える 3

6

関数は常に 1 を返します。

SELECT COUNT (*) FROM " 

ステートメントは、カウント数である1レコードでデータテーブルを埋めます。

行数が必要な場合は使用します

   con.Open();
   String cmdString = "SELECT COUNT (*) FROM " + "[" + Table +"]" 
   OleDbCommand cmd = new OleDbCommand();
   cmd.Text = cmdString ;
   cmd.Connection = con;
   int count = Convert.ToInt32(cmd.ExecuteScalar());

あなたが望むもののために、より速くて軽い。データテーブルなどのオブジェクトを使用する必要はありません。

于 2013-06-05T14:02:32.920 に答える
0

テーブルには 1 行しかありません。これには、クエリ内のテーブルのデータベース内の行数を含む単一のセルが含まれています。つまり、クエリの結果は 1 行 1 列のセットになります。

dt.Rows.Count の代わりに を返すこともできますがdt.Rows[0][0];、それはやり過ぎです。しかし、このような場合、私はExecuteScalar()を使用することがベストプラクティスだと思います (kostas から ninja'ed なので、称賛と彼への賛成票)。

于 2013-06-05T14:02:56.883 に答える