我通过i将调用SQL Dependency相关代码Application_Start事件,我的目标将完成。我的场景是我在我的Web应用程序中有一个例程,当我在sql server表中更新数据时,我只需单击一个按钮即可手动调用。我被告知要使这个过程自动化。
所以我浏览了几篇关于SQL Dependency的文章,通过我可以通过SQL依赖关系使我的手动过程自动化,因为我们可以通过SQL依赖关系监视表更改,SQL Dependency可以在完成更改时通知我们。
protected void Application_Start(Object sender, EventArgs e)
{
System.Data.SqlClient.SqlDependency.Stop(connectionString);
System.Data.SqlClient.SqlDependency.Start(connectionString);
RegisterNotification();
}
static SqlDependency dep;
private static void RegisterNotification()
{
string tmpdata = "";
try
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT ActivityDate FROM [bba-reman].ContentChangeLog";
dep = new SqlDependency(cmd);
dep.OnChange += new OnChangeEventHandler(OnDataChange);
SqlDataReader dr = cmd.ExecuteReader();
{
while (dr.Read())
{
if (dr[0] != DBNull.Value)
{
tmpdata = dr[0].ToString();
}
}
}
dr.Dispose();
cmd.Dispose();
}
}
finally
{
//SqlDependency.Stop(connStr);
}
}
static void OnDataChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dep = sender as SqlDependency;
dep.OnChange -= new OnChangeEventHandler(OnDataChange);
SiteSearch.CreateIndex(false);
RegisterNotification();
}
protected void Application_End(Object sender, EventArgs e)
{
System.Data.SqlClient.SqlDependency.Stop(connectionString);
}
上面的代码运行正常,但我遇到了一个很好的问题。假设没有访问者访问我们的网站,同时如果有人通过win应用程序更改sql数据,那么我看到OnDataChange()
事件未触发,但如果至少有一个访问者访问我们的网站,则{{1}事件正在正常发射。
可能这是asp.net引擎的默认属性。我可以在win服务或winform应用程序中使用SQL Dependency,但我有一些约束,因为检测到数据后我调用的例程在我们的Web应用程序中的db中发生了变化。
因此,如果没有访问者访问我们的网站,请指导我可以做的事情OnDataChange()
事件应始终触发。
感谢