таким образом мы отслеживаем изменение данных таблицы с помощью зависимости sql.
private static void RegisterNotification()
{
try
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT ID, Name FROM dbo.TestTable";
dep = new SqlDependency(cmd);
dep.OnChange += new OnChangeEventHandler(OnDataChange);
SqlDataReader dr = cmd.ExecuteReader();
{
while (dr.Read())
{
Console.WriteLine("Name = " + dr[1].ToString());
}
}
dr.Close();
Console.WriteLine("Waiting for any data changes...\nPress to end program.");
Console.ReadLine();
}
}
finally
{
//SqlDependency.Stop(connStr);
}
}
таким образом мы укажем sql SELECT ID, Name FROM dbo.TestTable
для изменения таблицы. мне нравится знать, нужно ли мне контролировать 2 таблицы, тогда мы можем написать sql, как этот путь
SELECT ID, Name FROM dbo.TestTable1;SELECT ID, Name FROM dbo.TestTable2
и читать данные таблицы таким образом
SqlDataReader dr = cmd.ExecuteReader();
{
while (dr.Read())
{
Console.WriteLine("Name = " + dr[1].ToString());
}
}
а затем снова dr.NextResult()
и снова прочитайте
while (dr.Read())
{
Console.WriteLine("Name = " + dr[1].ToString());
}
если я собираюсь в неправильном направлении контролировать несколько изменений данных таблицы, то, пожалуйста, направляйте меня с правильным info.looking для предложения. благодаря
Здесь очень хорошая статья с исходным кодом
Зависимость SQL-кэша от SQL Server, LINQ и ASP.NET 3.5 http://www.dotnetcurry.com/showarticle.aspx?ID=263
Важно (из статьи)
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "TESTSERVER\ASPNET"
С#
protected void Application_Start(object sender, EventArgs e)
{
SqlDependency.Start(ConfigurationManager.ConnectionStrings["pubsConnectionString"].ConnectionString);
}
Следующий код также останавливает прослушиватель:
protected void Application_End(object sender, EventArgs e)
{
SqlDependency.Stop(ConfigurationManager.ConnectionStrings["pubsConnectionString"].ConnectionString);
}