我是新来的查询通知与SQL Server的概念,这将需要一些时间对我来说,环绕它我的头。
我的目标是创建时的变化已经到SQL Server表作出通知Windows服务的应用程序。 我跟着这个指南,是让我开始有帮助的。
但是我没能获得预期的结果。 的OnStart()
在我的Windows服务应用方法看起来像这样:
protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("Service Started");
serviceRun = false;
SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
try
{
perm.Demand();
eventLog1.WriteEntry("permission granted");
}
catch (System.Exception)
{
eventLog1.WriteEntry("permission denied");
}
try
{
connstr = "Data Source=THSSERVER-LOCAL;Initial Catalog=ET;User ID=mujtaba;Password=ths123";
connection = new SqlConnection(connstr);
SqlCommand command = new SqlCommand("select * from dbo.Customer_FileUploads", connection);
// Create a dependency and associate it with the SqlCommand.
SqlDependency dependency = new SqlDependency(command);
// Maintain the reference in a class member.
// Subscribe to the SqlDependency event.
dependency.OnChange += Dependency_OnChange;
SqlDependency.Start(connstr);
connection.Open();
// Execute the command.
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
//eventLog1.WriteEntry("reading data");
}
}
else
{
eventLog1.WriteEntry("No rows found.");
}
reader.Close();
}
}
catch (Exception e)
{
eventLog1.WriteEntry("Error Message: " + e.Message);
}
}
该事件SqlDependency
订阅了,看起来就像这样:
private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
// Handle the event.
eventLog1.WriteEntry("data changed");
}
该OnStop()
方法看起来像这样:
protected override void OnStop()
{
SqlDependency.Stop(connstr);
connection.Close();
eventLog1.WriteEntry("In onStop.");
}
我有ENABLE_BROKER
设置为true在我的数据库。 最终的结果是,该服务运行及以下日志创建:
"Service Started"
"permission granted"
"data changed"
然而,当我把新数据插入表中, OnChange()
事件不火而没有创建新日志。 此外,当我再次停止和启动服务时, OnChange()
是即使有插入没有新的数据触发。
谁能帮我理解这个过程?