BeginneExecuteReaderを使ってデータを非同期的にロードします.
4360 ワード
1.Sql Command.ExecuteReader()を使用するとフォームの仮死を引き起こすので、.net 2.を追加する方法BeginnecuteReaderを使用します.
コードは以下の通りです
コードは以下の通りです
private delegate void DataGridViewHandler(DataTable dt);
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
SqlConnection conn =
new SqlConnection("Data Source=.;Initial Catalog=Test;User Id=sa;Password=*********;Async=true");
conn.Open();
SqlCommand cmd = new SqlCommand("Select top 700000 * from Test", conn) {CommandTimeout = 0};
// , ,ProcessData
cmd.BeginExecuteReader(ProcessData, cmd);
// ,label2 Text
label2.Text = "label2 Text ";
}
/// <summary>
/// ,
/// </summary>
/// <param name="ar"></param>
private void ProcessData(IAsyncResult ar)
{
SqlCommand cmd = (SqlCommand) ar.AsyncState;
using (cmd.Connection)
{
using (cmd)
{
SqlDataReader sdr = cmd.EndExecuteReader(ar);
DataTable dt = new DataTable("Product");
dt.Load(sdr);
// , dataGridView1 DataSource
dataGridView1.BeginInvoke(
new DataGridViewHandler((dtResult) => dataGridView1.DataSource = dtResult), dt);
}
}
}