私は、SQL依存関係(C#4.0)を使用してデータベースの変更をリッスンする方法を理解しようとしています。私はWeb上でかなり多くのことを見てきましたが、SQL Dependencyが依存しているのと同じデータを取得する依存関係を使用するために(自然に)調整されているようです。たとえば、this articleです。C#のSQL依存関係
私がしようとしているのは、トリガされたときに、他の方法などで保存できるさまざまなSQLの「選択」クエリの結果となる依存関係を作成することです。例:テーブルの行数を監視する依存関係を設定しようとしています。行数が増えたら、x、y、zを実行します(つまり、プログラムは行数が気にならず、行数が増えていても大丈夫です)。
これを行う最も良い方法は何ですか?
編集:私は現在自分のコードを添付しています。私はGetData()プロセスからSqlDependencyの設定を分離する方法を理解しようとしています。現在、しかし、私は、イベントハンドラと再実行「SetupSqlDependencyを()」を削除した後、それはすぐに戻ってあなたがSqlDependencyをフックすることができますイベントハンドラ
private void SetupSQLDependency()
{
// Tutorial for this found at:
// http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/
SqlDependency.Stop(connectionString);
SqlDependency.Start(connectionString);
sqlCmd.Notification = null;
// create new dependency for SqlCommand
SqlDependency sqlDep = new SqlDependency(sqlCmd);
sqlDep.OnChange += new OnChangeEventHandler(sqlDep_OnChange);
SqlDataReader reader = sqlCmd.ExecuteReader();
}
private void sqlDep_OnChange(object sender, SqlNotificationEventArgs e)
{
// FROM: http://msdn.microsoft.com/en-us/a52dhwx7.aspx
#region
// This event will occur on a thread pool thread.
// Updating the UI from a worker thread is not permitted.
// The following code checks to see if it is safe to
// update the UI.
/* ISynchronizeInvoke i = (ISynchronizeInvoke)this;
// If InvokeRequired returns True, the code
// is executing on a worker thread.
if (i.InvokeRequired)
{
// Create a delegate to perform the thread switch.
OnChangeEventHandler tempDelegate = new OnChangeEventHandler(sqlDep_OnChange);
object[] args = { sender, e };
// Marshal the data from the worker thread
// to the UI thread.
i.BeginInvoke(tempDelegate, args);
return;
}*/
#endregion
// Have to remove this as it only work's once
SqlDependency sqlDep = sender as SqlDependency;
sqlDep.OnChange -= sqlDep_OnChange;
// At this point, the code is executing on the
// UI thread, so it is safe to update the UI..
// 1) Resetup Dependecy
SetupSQLDependency();
}
私が混乱しているのは、依存関係を "GetData"マテリアルに設定するプロセスを組み合わせていることです。私はそれを分離する方法を見つけようとしています、もしあなたの要点を詳述するために編集されたのであれば – keynesiancross
です。 – usr
ありがとうございます。どこで.Changeイベントを取得しますか?私はOnChangeイベントだけを取得しますか? (または私は言語を越えて管理することができました...)。私は私の現在のコードを含めるように私の質問を更新しました – keynesiancross