Tag: sqldependency

SQLDependency – 无效的SQL

我从这里可以看出最好的,我没有违反任何规则,但是更改事件会一直触发,状态无效。 SELECT COUNT_BIG([PK_Column]) AS RecordCount FROM [dbo].[My_Table] GROUP BY Varchar_50_Column 如果我这样做,一切正常。 SELECT [PK_Column] FROM [dbo].[My_Table] 但是,我不想返回这么多数据,并且SqlDependency似乎要求在每次更改事件触发以设置(或重置)订阅之后执行一次查询。 知道我的第一个查询中有什么缺陷吗?

SQLDependency + Service Broker

我正在使用SqlDependency在某些表中的数据发生更改时获取通知。 private void subscribeBroker() { using (var conn = new SqlConnection(connString)) { conn.Open(); var cmd = new SqlCommand(“SELECT text FROM dbo.Test”); cmd.Connection = conn; var dependency = new SqlDependency(cmd); dependency.OnChange += dependency_OnChange; SqlDependency.Start(connString); cmd.ExecuteNonQuery(); } } void dependency_OnChange(object sender, SqlNotificationEventArgs e) { //Do something… subscribeBroker(); } 它有效,但我有一些问题。 1)我没有找到一种方法来获取哪些行被更改的信息。 我需要读取整个表中的所有数据,看看有什么不同。 有没有办法获得这些信息? (主要ID,或者其他)也许使用与SqlDependency不同的方法? 2)如果“某人”非常快速地改变数据怎么办? 某些更改可能不会被通知? (我关注通知和再次订阅时间之间的时间。 谢谢。

如何保持sql依赖性的目的

我有一个控制台应用程序。 我想继续关注数据库表中特定列的更改。 我通过互联网阅读,我发现sql依赖有利于我的目的。 我开始学习它,我做了以下事情: 创建一个类。 在构造函数中,我调用了静态函数start并调用了一个具有所有sql依赖项设置的函数。 我的问题 当我使用start点击visual studio 2013运行应用程序时,应用程序工作然后停止。 但是 ,我需要的是应用程序开始工作并继续关注数据库表中的更改。 请问你能帮帮我吗? 码: 这是一个非常简单的c#代码。 public class MyListener { public MyListener() { SqlDependency.Start(getConnectionString()); this.listen(); } private string getConnectionString() { return ConfigurationManager.ConnectionStrings[“popup”].ConnectionString.ToString(); } private void listen() { string query = “SELECT CallerID FROM TransferToSIP WHERE hasBeenRead = 0”; SqlConnection con = new SqlConnection(getConnectionString()); SqlCommand cmd = […]

很长一段时间后SqlDependency错误

我有一个Windows服务使用SqlDependency类监听表中的插入。 它工作好几天但后来突然停止工作。 在正常情况下,我收到更改事件 e.Type = SqlNotificationType。 更改 e.Info = SqlNotificationInfo。 插入 e.Source = SqlNotificationSource。 数据 如果没有任何变化,我每隔3600秒就会收到超时事件 e.Type = SqlNotificationType。 更改 e.Info = SqlNotificationInfo。 错误 e.Source = SqlNotificationSource。 超时 或(不知道为什么有两个不同的超时事件) e.Type = SqlNotificationType。 更改 e.Info = SqlNotificationInfo。 未知 e.Source = SqlNotificationSource。 超时 这可以工作一周或更长时间但突然间我不再接收更改事件,而是每隔60秒接收一次事件 e.Type = SqlNotificationType。 更改 e.Info = SqlNotificationInfo。 错误 e.Source = SqlNotificationSource。 客户 SqlNotificationSource.Client的msdn文档说 […]

与asp.net的SqlDependency问题

我正在尝试使用server_brokerfunction从sqlserver获取更改的值。 我的代码如下 protected void Page_Load(object sender, EventArgs e) { GetData2(); } private void GetData2() { List lst = new List(); using (SqlConnection con = Baglan.Sql) { string sql = “SELECT [Id],[Ad],[Durum] FROM [dbo].[Masa]”; using (SqlCommand cmd = new SqlCommand(sql, con)) { con.Open(); SqlDependency dependency = new SqlDependency(cmd); dependency.OnChange += new OnChangeEventHandler(dependency_OnDataChangedDelegate); using (IDataReader reader = […]

C#中的SQL依赖关系

我正在试图弄清楚如何使用SQL依赖(C#4.0)来“监听”数据库的更改。 我在Web上看到了很多东西,但它们似乎(自然地)用于使用依赖项来提取SQL依赖关系所依赖的相同数据。 例如, 这篇文章 。 我要做的是创建一个依赖项,当被触发时,会产生许多不同的SQL“Select”查询(我可以将其存储在其他方法中等)。 例如:我正在尝试设置一个监视表中行数的依赖项。 当行数增加时,则执行x,y,z(即我的程序不关心行数是多少,只是它增加了,当它确实做了很多事情时)。 关于最好的方法是什么的任何想法? 编辑:我已经附上了我目前的代码。 我试图找出如何分离设置SqlDependency和GetData()过程。 目前,我认为我进入一个无限循环,因为我删除事件处理程序并重新运行“SetupSqlDependency()”后,它会回到事件处理程序 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) […]

SqlDependency OnChange未触发

这是我第一次需要使用SqlDependency,所以我希望这是我犯的一个愚蠢的错误。 我遇到的问题是当sql表更改时,OnChanged事件不会触发。 没有错误或任何事情只是它不会触发。 这是代码 public class SqlWatcher { private const string SqlConnectionString = “Data Source = CN-PC08\\DEV; Initial Catalog=DEP; User = sa; Password=******”; public SqlWatcher() { SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted); perm.Demand(); SqlCommand cmd = new SqlCommand(“SELECT [DataAvaliable], [RowNumber] FROM [dbo].[Trigger]”, new SqlConnection(SqlConnectionString)); SqlDependency sqlDependency = new SqlDependency(cmd); sqlDependency.OnChange += On_SqlBitChanged; } private void On_SqlBitChanged(object […]

从SqlDependency获取数据

我有一个表和一个等待新插入的SqlDependency。 OnChange会根据需要触发,但我不明白是否有可能获得导致数据库更改的行。 SqlDependency sql命令: SqlCommand cmd = new SqlCommand(“SELECT id FROM dbo.DataRequests”, m_sqlConn); OnChange代码: private void OnChange(object sender, SqlNotificationEventArgs e) { SqlDependency dependency = sender as SqlDependency; dependency.OnChange -= OnChange; Console.WriteLine(“Info: ” + e.Info.ToString()); Console.WriteLine(“Source: ” + e.Source.ToString()); Console.WriteLine(“Type: ” + e.Type.ToString()); Console.WriteLine(DateTime.Now); GetMessages(); }

与EntityFramework 6的SqlDependency(异步)

我正在使用EF 6 async查询function,例如 var list = await cx.Clients.Where(c => c.FirstName.Length > 0).ToListAsync(); 我还想在这些查询上启动SQL依赖项,以便在数据库中的数据发生更改时收到通知。 我可以使用System.Runtime.Remoting.Messaging.CallContext执行此操作,如下所示: async Task GetData() { using (ClientsContext context = new ClientsContext()) // subclass of DbContext { SqlDependency.Start(context.Database.Connection.ConnectionString); SqlDependency dependency = new SqlDependency(); dependency.OnChange += (sender, e) => { Console.Write(e.ToString()); }; System.Runtime.Remoting.Messaging.CallContext.SetData(“MS.SqlDependencyCookie”, dependency.Id); var list = await context.Clients.Where(c => c.FirstName.Length > 0).ToListAsync(); } […]

检测SQL数据库更改

考虑这个例子: INSERT INTO [Table] (column1) SELECT value1 如果我要在SSMS中执行此命令,关于ac#forms应用程序,为了识别此事件,我需要做些什么? 像发生此事件时显示MessageBox的应用程序一样简单。 我似乎无法解决这个问题或找到任何有用的数据。 我试图使用SqlDependency但没有运气。 如果那是我需要走的道路,那么任何人都可以帮助我更好地理解这个概念吗?