0
Windowsサービス内のデータベースで挿入/更新イベントをキャプチャするためにSQL Server通知を使用したいと考えています。私はSQLDependencyオブジェクトを使用しようとしています。 MSDNの記事ではこれをかなり簡単に思えるようにしています。だから私は試してみるための小さなサンプルアプリケーションを作成しました。テーブルにデータを変更するとき、それは見えるOnChangeイベントを発生させません。誰かが私に行方不明を教えてもらえますか?ありがとう!私のコードのサンプルは以下の通りです。SQL Server通知 - 私のOnChangeがWindowsサービスから起動しない
private bool CanRequestNotifications()
{
SqlClientPermission permit = new
SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
try
{
permit.Demand();
return true;
}
catch (System.Exception exc)
{
return false;
}
}
private void NotificationListener()
{
string mailSQL;
SqlConnection sqlConn;
try
{
string connString = "Data Source=xyz;Initial Catalog=abc;User ID=sa;Password=******";
mailSQL = "SELECT * FROM [tbl_test]";
SqlDependency.Stop(connString);
SqlDependency.Start(connString);
sqlConn = new SqlConnection(connString);
SqlCommand sqlCmd = new SqlCommand(mailSQL, sqlConn);
this.GetNotificationData();
evtLog.WriteEntry("Error Stage: NotificationListener" + "Error desc:" + "Message", EventLogEntryType.Error);
}
catch (Exception e)
{
// handle exception
}
}
private void GetNotificationData()
{
DataSet myDataSet = new DataSet();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Notification = null;
SqlDependency dependency = new SqlDependency(sqlCmd);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
evtLog.WriteEntry("Error Stage: GetNotificationData" + "Error desc:" + "Message", EventLogEntryType.Error);
}
private void dependency_OnChange(object sender,SqlNotificationEventArgs e)
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= dependency_OnChange;
this.GetNotificationData();
evtLog.WriteEntry("Error Stage: dependency_OnChange" + "Error desc:" + "Message", EventLogEntryType.Error);
}
protected override void OnStart(string[] args)
{
CanRequestNotifications();
NotificationListener();
}
protected override void OnStop()
{
SqlDependency dependency = new SqlDependency();
dependency.OnChange -= dependency_OnChange;
SqlDependency.Stop(connString);
}
インスタンスを1つのインスタンスに変更しました。そして、私はSQL管理スタジオを使用して、データベースにテーブルに直接変更を加えていますが、サービスは実行中です。また、私はWindowsアプリケーションでこれを試して、それは正常に働いた。 – user930596
多くの人がdependency_OnChange()イベントからNotificationListener()を呼び出す必要があるような戦略を見ていました。ちょうど試して。 – Thomas