JOB を使用してテーブル データを継続的に監視しています。JOB 内で、SQLCLR SP を呼び出しています。SQLCLR SP が実行されます。while ループの前に、SQL 接続を開きます。forループ内では、1回の接続でデータベースに1000〜10000回アクセスします。作業が完了するまで DB 接続を閉じません。
SqlConnection connection = null;
try
{
using (connection = new SqlConnection("context connection=true"))
{
connection.Open();
DataTable dt;
SqlDataAdapter adp=new SqlDataAdapter("select * from tableName",CnStr);
DataSet ds=new DataSet();
adp.Fill(ds,"TableName");
dt= ds[0];
//dt.Rows.count may be range from 1000-10000
for(i=0;i<dt.Rows.count;i++)
{
int id = int.Parse(dt.Rows[i][0].ToString());
SqlCommand command = new SqlCommand("select * from table1 where IsParsed=0 and Id=" + id, connection);
SqlDataReader r1 = command.ExecuteReader();
SqlCommand command = new SqlCommand("Insert into table2 (values)", connection);
int r2 = command.ExecuteNonQuery();
//Always get table1 data which has IsParsed=0. Get those rows manipulate those rows data and
// insert into datatable table2 and update those rows to IsParsed=1
SqlCommand command = new SqlCommand("Update table1 set IsParsed=1 where id=@id", connection);
int r3 = command.ExecuteNonQuery();
// Run the Billing Logic here
// Insert into Billing Table
SqlCommand command = new SqlCommand("Insert into Billing(values)", connection);
int r2 = command.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
}
finally
{
connection.close();
}
このアプローチに問題はありますか? このような接続を使用しても問題はありますか? 適切な提案を提供する..
単一の接続で複数のコマンドを実行するためのより良い方法の記事 を読みました
ここでは、コンテキスト接続を使用して、単一の接続で数千のコマンドを実行しています。コンテキスト接続での接続プールの考慮事項はありますか..? 接続ごとに単一のコマンドを実行する場合と、単一の接続で複数のコマンドを実行する場合のパフォーマンスはどうですか?
また、コンテキスト接続と通常の接続の両方のケースで同じ結果が得られることを知りたいですか? SP は DB 自体にデプロイされるためです。私が間違っている場合は、私を修正してください。