SQL 2008バックエンドを備えたC#/。NET4のWindowsフォームアプリがあります。ボタンクリックイベントハンドラーでSqlConnectionを開き、複数のバックグラウンドワーカーを呼び出します。各バックグラウンドワーカーは、usingブロック内で接続のCreateCommandメソッドを呼び出します。
private void btnSubmit_Click(object sender, EventArgs e)
{
cn.Open();
bw01.RunWorkerAsync(x);
bw02.RunWorkerAsync(x);
while (bw01.IsBusy || bw02.IsBusy)
Application.DoEvents();
cn.Close();
}
private void bw01_DoWork(object sender, DoWorkEventArgs e)
{
try
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = <some SQL>
e.Result = Convert.ToInt32(cmd.ExecuteScalar());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
private void bw02_DoWork(object sender, DoWorkEventArgs e)
{
try
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText = <some SQL>
e.Result = Convert.ToInt32(cmd.ExecuteScalar());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
コードは機能する場合もありますが、エラーが発生する場合もあります。最も一般的なのは、「現在のコマンドで重大なエラーが発生しました。結果があれば破棄する必要があります」です。
接続文字列にMultipleActiveResultSets=trueが含まれています。私は何が間違っているのですか?