SQLDataReaderを使用してテーブルから制限された行数を読み込み、グリッドビューにページングできるようにしています。私が望む行数を読んだら、私は終了したい。ただし、Reader.Close(またはReader.Dispose)はすぐには返されません。SQLDataReader.Closeがすぐに閉じない
私はデータを読むさまざまな方法の比較を示すためにこれをやっているので、私は代わりの解決策を探していません。必要な数の行があるときにコードを終了するだけです。ここで
コードは次のとおりです。
SqlDataReader Reader = null;
SqlConnection Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ZipData"].ConnectionString);
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ZipCode", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("City", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("State", System.Type.GetType("System.String")));
try
{
string Query = string.Format("{0} WHERE ZipCode Like @ZipCode AND City Like @City AND State Like @State ORDER BY {1}", SQLQuery, (string.IsNullOrEmpty(sortType)) ? "ZipCode" : sortType);
SqlCommand Command = new SqlCommand(Query, Connection);
Command.Parameters.Add(new SqlParameter("@ZipCode", filter.Zip + "%"));
Command.Parameters.Add(new SqlParameter("@City", filter.City + "%"));
Command.Parameters.Add(new SqlParameter("@State", filter.State + "%"));
Connection.Open();
Reader = Command.ExecuteReader();
int CurrentRow = 0;
DataRow row;
while (Reader.Read())
{
if (CurrentRow >= startRowIndex)
{
if (dt.Rows.Count > maximumRows) break;
row = dt.NewRow();
row["ZipCode"] = (string)Reader["ZipCode"];
row["City"] = (string)Reader["City"];
row["State"] = (string)Reader["State"];
dt.Rows.Add(row);
}
CurrentRow++;
}
Reader.Close();
}
catch (SqlException ex)
{
ErrorMessage = ex.Message;
}
finally
{
Connection.Close();
}
return dt;
このソリューションのように見えます..ありがとう@SpectralGhost –