リーダーを反復して返された行数を取得しようとしています。しかし、このコードを実行すると常に1を取得しますか?これで何かを台無しにしましたか?
int count = 0;
if (reader.HasRows)
{
while (reader.Read())
{
count++;
rep.DataSource = reader;
rep.DataBind();
}
}
resultsnolabel.Text += " " + String.Format("{0}", count) + " Results";
SQLDataReadersは前方専用です。あなたは本質的にこれをやっています:
count++; // initially 1
.DataBind(); //consuming all the records
//next iteration on
.Read()
//we've now come to end of resultset, thanks to the DataBind()
//count is still 1
代わりにこれを行うことができます:
if (reader.HasRows)
{
rep.DataSource = reader;
rep.DataBind();
}
int count = rep.Items.Count; //somehow count the num rows/items `rep` has.
DataTable dt = new DataTable();
dt.Load(reader);
int numRows= dt.Rows.Count;
これは行数を取得しますが、最後にデータリーダーを残します。
dataReader.Cast<object>().Count();