我正在尝试在我的Windows应用程序中使用SQLDependency并遵循定义的步骤How can I notify my program when the database has been updated?和http://dotnet.dzone.com/articles/c-sqldependency-monitoring
我启用了Service Broker,设置了队列,在队列上创建了一个服务:
ALTER DATABASE [Company] SET ENABLE_BROKER;
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
下一步是让SQL用户订阅查询通知。我知道我可以提供登录用户,即sa(使用SELECT * FROM sys.server_principals查询验证):
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sa;
但我得到“找不到用户'sa',因为它不存在或者您没有权限。”
我也使用了像sysadmin这样的其他用户来授予权限,但每次我都收到同样的错误。然后我读@ http://ask.sqlservercentral.com/questions/7803/msg-15151-level-16-state-1-line-1-cannot-find-the.html),需要向用户提供权限,而不是我所做的登录。所以现在我已经向'public'和'guest'提供了权限,并且sql查询成功执行而不是dbo(“不能授予,拒绝或撤销对sa,dbo,实体所有者,information_schema,sys或你自己的权限。 “)
c#中的应用程序代码并不太复杂,我已经按照开头提供的链接进行操作,所以不要在这里放置代码(当然我根据上面的sql命令更改了队列名称等)。但是当我更改表记录(插入/删除)时,SQlDependency似乎不起作用。
我哪里错了?有没有我缺少的步骤
答案 0 :(得分:0)
尝试:
use [master]
go
alter authorization on database::[YourDatabaseName] to [sa]
go