- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用SqlDependency
在其他使用数据库的应用程序更改某些数据时获取通知。
public class DatabaseChangesNotification : IDisposable
{
private static string chaineDeConnexion = ConfigurationManager.ConnectionStrings["TransfertContext"].ConnectionString;
private static readonly Lazy<DatabaseChangesNotification> _instance = new Lazy<DatabaseChangesNotification>(() => new DatabaseChangesNotification());
private DatabaseChangesNotification()
{
System.Diagnostics.Trace.WriteLine("--- SqlDependency START ---");
SqlDependency.Start(chaineDeConnexion);
}
public void Dispose()
{
System.Diagnostics.Trace.WriteLine("--- SqlDependency STOP ---");
SqlDependency.Stop(chaineDeConnexion);
}
public static DatabaseChangesNotification Instance
{
get
{
return _instance.Value;
}
}
public void AbonnerNotification(string requete, OnChangeEventHandler eventhandler)
{
using (SqlConnection connection = new SqlConnection(chaineDeConnexion))
{
using (SqlCommand command = new SqlCommand(requete, connection) { Notification = null }) // clear existing notifications
{
connection.Open();
var sqlDependency = new SqlDependency(command);
OnChangeEventHandler delegateAutoRemove = null;
delegateAutoRemove = (sender, e) => {
var dependency = sender as SqlDependency;
dependency.OnChange -= delegateAutoRemove;
eventhandler(sender, e);
};
sqlDependency.OnChange += delegateAutoRemove;
command.ExecuteNonQuery();
}
}
}
}
DatabaseChangesNotification.Instance.AbonnerNotification(@"SELECT IdUtilisateur, Code, Nom, Prenom, NomComplet, Login, Synchroniser FROM dbo.Utilisateur", OnChanges);
public void OnChanges(object sender, SqlNotificationEventArgs e){
System.Diagnostics.Trace.WriteLine("------------------------------ UPDATTEEEE -------------------------");
System.Diagnostics.Trace.WriteLine("Info: " + e.Info.ToString());
System.Diagnostics.Trace.WriteLine("Source: " + e.Source.ToString());
System.Diagnostics.Trace.WriteLine("Type: " + e.Type.ToString());
GlobalHost.ConnectionManager.GetHubContext<TransfertClientHub>().Clients.All.hello("users modified !");
//AbonnementChanges();
}
--- ABONNEMENT ---
------------------------------ UPDATTEEEE -------------------------
Info: Query
Source: Statement
Type: Subscribe
AbonnementChanges
的原因(否则它将无限循环)。
OnChanges
)并且我的请求符合要求(
https://msdn.microsoft.com/en-us/library/ms181122.aspx)。
{ Notification = null }
不返回任何内容。
EXEC sp_addrole 'sql_dependency_subscriber'
EXEC sp_addrole 'sql_dependency_starter'
-- Permissions needed for [sql_dependency_starter]
GRANT CREATE PROCEDURE to [sql_dependency_starter]
GRANT CREATE QUEUE to [sql_dependency_starter]
GRANT CREATE SERVICE to [sql_dependency_starter]
GRANT REFERENCES on
CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]
to [sql_dependency_starter]
GRANT VIEW DEFINITION TO [sql_dependency_starter]
-- Permissions needed for [sql_dependency_subscriber]
GRANT SELECT to [sql_dependency_subscriber]
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [sql_dependency_subscriber]
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [sql_dependency_subscriber]
GRANT REFERENCES on
CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]
to [sql_dependency_subscriber]
select * from sys.dm_qn_subscriptions
)添加到此角色:
EXEC sp_addrolemember 'sql_dependency_starter', 'production'
EXEC sp_addrolemember 'sql_dependency_subscriber', 'production'
------------------------------ UPDATTEEEE -------------------------
Info: Query
Source: Statement
Type: Subscribe
production
。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Utilisateur](
[IdUtilisateur] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_Utilisateur_IdUtilisateur] DEFAULT (newid()),
[Code] [varchar](10) NOT NULL,
[Nom] [varchar](100) NOT NULL,
[Prenom] [varchar](100) NULL,
[NomComplet] AS (([Prenom]+' ')+[Nom]),
[Login] [varchar](50) NULL,
[Synchroniser] [bit] NOT NULL CONSTRAINT [DF_Utilisateur_Synchroniser] DEFAULT ((1)),
[DATE_CREATION] [datetime] NOT NULL CONSTRAINT [DF__Utilisate__DATE___2AA1E7C7] DEFAULT (getdate()),
[DATE_DERNIERE_MODIF] [datetime] NOT NULL CONSTRAINT [DF__Utilisate__DATE___2B960C00] DEFAULT (getdate()),
[Desactive] [bit] NOT NULL CONSTRAINT [DF_Utilisateur_Desactive] DEFAULT ((0)),
CONSTRAINT [PK_Utilisateur] PRIMARY KEY CLUSTERED
(
[IdUtilisateur] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SELECT Nom, Prenom FROM dbo.Utilisateur
检查一下:
SELECT Nom, Prenom FROM dbo.Utilisateur
引起的,该列在服务代理中无效(即使我不要求通知此列的更改,这对我来说很奇怪)。
最佳答案
ServiceBroker无法处理具有计算列的表。您需要从表中删除NomComplet
,或将其更改为另一种填充方式(触发器、存储过程等)的实际列。
正在立即触发通知,因为在设置队列时发生错误。
关于c# - SqlDependency立即触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29392434/
我想使用 SignalR 和 SQLDependency 仅从数据库获取更新的行。 表的状态列可以从多个应用程序更新。我需要的是,当此状态列更新时,我需要我的应用程序获取状态实时更新的记录。我正在尝试
我试图在 SignalR 项目中使用 SqlDependancy,但我似乎无法多次触发 OnChanged 事件。它最初在订阅事件上触发,但在对基础数据库进行更改后再也不会触发。我省略了我的 Sign
我们正在开发一个 WPF 应用程序,使用 SqlDependencies 来根据数据库更新应用程序。我们已经认识到几次,查询通知似乎是不规则的——应用程序不显示数据库的最新状态。一旦其他人更改了桌面上
我正在使用 SqlDependency 在某些表中的数据发生更改时获得通知。 private void subscribeBroker() { using (var c
是否可以在 C# 中为 Sql Server 运行 SqlDependency 而无需执行查询? 我有一些可以变得相当大的表。跨表执行查询以判断行是否已更改可能需要很长时间。 最佳答案 不,SqlDe
我想在我的项目中使用 SqlDependency,但是我想要依赖的表正被多个程序用于非常重要的目的。因此,他们必须能够在 SqlDependency 运行时插入此表。这可能吗? 我读过 this问题,
我刚刚从 Microsoft 官方来源复制了示例 http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx我对此感到困惑。运行应用程
我正在尝试使用 SqlDependency 编写代码来注册通知,但我无法让它工作。我首先尝试在 .Net 中使用 Visual Studio,然后将其编译为 Mono。这是我的代码:http://pa
我正在尝试让查询通知在 SQL Server 2012 上运行。我正在按照此链接中的教程进行操作:http://www.codeproject.com/Articles/144344/Query-No
背景: 在设置 SqlDependency 时,我使用了这些文章中的信息来为数据库用户提供所需的最低权限: Minimum Database Permissions Required for SqlD
我想在我的项目中使用 SQLDependency 和依赖注入(inject)。这是我的代码 public interface IAreaRepository { string GetAreaQu
我有一个简单的查询,事件在正确的时间触发。但是,一旦触发,SqlDependency 对象的属性 .HasChanges 始终设置为 true。 第一次触发 OnChange 时,SqlNotific
我有一个包含聊天信息的 mssql 表。它有计算列,有数百万行,并且正在被第三方应用程序使用/填充。现在我想使用此表在我的网站上显示聊天记录,并且将来可能能够使用 signalr 发送消息。我使用 s
我一直在使用 SqlDependency在 .NET 3.5 应用程序中使用超过 3 年没有任何问题。场景如下: 带有 SqlDependency 的中央窗口服务看一张 table (我们称这张 ta
我将表用作消息队列并使用 SqlDependency“注册”更新。在我读到的所有地方,人们都在说“注意它的局限性”,但没有具体说明它们是什么。据我了解,当表的更新频率非常高时,您会遇到问题;幸运的是,
我目前的情况是我有一个应用程序需要在新数据到达数据库表时得到通知。数据来自外部来源(我无法控制——这是唯一的集成选项)。当新数据到达时,我的应用程序需要采取某些操作——基本上是查询新数据、处理它、将结
我有一个关于 SqlDependency 的简短问题。我在故障转移群集中配置了两个 SQL 2005 服务器。 当事件节点更改时,我停止接收通知...我必须手动重新启动承载 SqlDependency
使用 SQLDependency 需要什么权限?我在网上查了书,但没有明确这一点。 最佳答案 这有效: CREATE SCHEMA sql_dependency_user --empty placeh
在过去 3 天为这个问题苦苦挣扎之后,我终于把我的问题放在这里了。 我正在尝试使用 SignalR 和 SqlDependency 构建一个实时应用程序。显然,SQLDependency 不工作。但是
我的数据库中有两个表,一个记录异常,另一个记录日志消息。 我正在利用 SqlDependency 对象在这些表更改时收到通知,以便我可以更新我的网络仪表板。我得到了这个工作: public IEnum
我是一名优秀的程序员,十分优秀!