有没有办法在SQL Azure数据更改或插入新数据时收到通知?我想向ASP.NET Web应用程序发送通知并将通知推送到Windows Phone.我知道SqlDependency类和Query通知用于监视SQL Server 2008数据库数据更改,但SQL Azure尚不支持这一点.
asp.net sqldependency windows-phone query-notifications azure-sql-database
我有一个关于SQL的表,当有一个插入到这个表时,我想打印这个插入的数据.
我在想什么:
我不知道触发器触发时ac#代码触发的功能名称是什么.
你能帮帮我解决这个问题吗?
我想利用SQL Server通知在winforms应用程序中捕获我的数据库中的插入事件.我试图使用SQLDependency对象.MSDN文章使这看起来非常简单.所以我创建了一个小例子应用程序试一试.当我第一次进入我的应用程序时,事件似乎才会触发(MessageBox出现).将数据插入表中不会引发它看起来的OnChange事件.有人能告诉我我错过了什么吗?谢谢!
public Main()
{
InitializeComponent();
var check = EnoughPermission();
SqlDependency.Stop(constr);
SqlDependency.Start(constr);
if(connection == null)
{
connection = new SqlConnection(constr);
}
if(command == null)
{
command = new SqlCommand("Select ID, ChatMessage FROM dbo.Chat",connection);
}
connection.Open();
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
command.ExecuteReader();
}
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
MessageBox.Show("Change!");
}
Run Code Online (Sandbox Code Playgroud) 我试图找出如何使用SQL依赖(C#4.0)来"监听"数据库的更改.我在网上看到了很多东西,但它们似乎(自然地)用于使用依赖项来提取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)
{
// FROM: http://msdn.microsoft.com/en-us/a52dhwx7.aspx
#region
// This event will occur on a thread pool thread.
// Updating the UI from a worker thread is not permitted.
// The following code checks …Run Code Online (Sandbox Code Playgroud) 是否可以将SignalR与SqlCacheDependency(或SqlDependency)结合使用,将数据库更新直接推送到浏览器?也许有另一种方法来实现这个功能?
我现在唯一可以使用的工作包括必须从执行数据更新的异步调用中调用addMessage,但这并不真正涵盖来自不同源的更新(例如更新表的后台服务).
我正在尝试让SqlDependency对象给我通知,但到目前为止我无法让它工作.
我发送的SQL查询是这样的:
SELECT [SocialMedia].[dbo].[Items].[Id]
FROM [SocialMedia].[dbo].[Items]
Run Code Online (Sandbox Code Playgroud)
我已经尝试了w /和没有大括号,拥有完全限定名称,只有变量名称,以及中间的所有内容.
Id是类型Guid,我没有看到任何提及他们在创建通知查询文章中不能使用SqlDependency对象
我也试过发送多个列来查看是否可行.
SELECT SocialMedia.dbo.Items.Id,
SocialMedia.dbo.Items.DateTimeCreated,
SocialMedia.dbo.Items.AuthorId
FROM SocialMedia.dbo.Items
Run Code Online (Sandbox Code Playgroud)
这也没有用.
USE [SocialMedia]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[Items](
[Id] [uniqueidentifier] NOT NULL,
[DateTimeCreated] [datetimeoffset](7) NOT NULL,
[AuthorId] [uniqueidentifier] NOT NULL,
[Source] [varchar](max) NOT NULL,
[PlaceId] [uniqueidentifier] NULL,
[FullText] [varchar](max) NOT NULL,
[Geography] [geography] NULL,
[DateTimeAdded] [datetime] NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ( [Id] ASC )
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = …Run Code Online (Sandbox Code Playgroud) 我只想使用 SignalR 和 SQLDependency 从数据库中获取更新的行。
可以从多个应用程序更新表的状态列。我需要的是,当此状态列更新时,我需要我的应用程序获取实时更新状态的记录。我正在尝试使用 SQLDependency 和 SignalR。
任何帮助将不胜感激。
我将 Signalr 与 SqlDependency 一起使用。我的代码有效,并且它向我显示了我想要的实时结果。但问题是它正在运行我新创建的数据库。如果我将数据库更改为旧数据库,SqlDependency 将停止工作并且无法对我的数据库表进行更改检测。
下面是我的代码:
#region SignalRMethods
[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod(EnableSession = true)]
public GlobalApplicationError[] GetErrorsList()
{
var cs = "Data Source=.;Initial Catalog=NotifyDB;Integrated Security=True";
using (var connection = new SqlConnection(cs))
{
connection.Open();
SqlDependency.Start(cs);
using (SqlCommand command = new SqlCommand(@"SELECT [Form_Name],[Message],[Prepared_By_Date] FROM [GlobalApplicationError]", connection))
{
// Make sure the command object does not already have
// a notification object associated with it.
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
using (var reader = command.ExecuteReader()) …Run Code Online (Sandbox Code Playgroud) 我想在我的项目中使用SqlDependency,但是我想要依赖的表正被几个程序用于非常重要的目的.因此,他们必须能够在SqlDependency运行时插入此表.那可能吗?
我已经读过这个问题,但没找到答案.
我正在尝试使用Signalr开发一个网站SqlDependency.我启用了Service Broker并运行了以下T SQL:
GRANT CREATE PROCEDURE TO [SqlUser];
GRANT CREATE SERVICE TO [SqlUser];
GRANT CREATE QUEUE TO [SqlUser];
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [SqlUser];
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [SqlUser];
GRANT CONTROL ON SCHEMA::[dbo] TO [SqlUser];
GRANT IMPERSONATE ON USER::DBO TO [SqlUser];
Run Code Online (Sandbox Code Playgroud)
但是当我运行网站时,我收到以下错误:
找不到指定的用户'所有者'.
找不到队列'SqlQueryNotificationService-ce08361b-7c12-412a-a087-495959118214',因为它不存在或您没有权限.
无效的对象名称'SqlQueryNotificationService-ce08361b-7c12-412a-a087-495959118214'.
protected void Application_Start()
{
SqlDependency.Start(
ConfigurationManager
.ConnectionStrings["CiaosConnectionString"].ConnectionString);
//WebApiConfig.Register(GlobalConfiguration.Configuration);
GlobalConfiguration.Configure(WebApiConfig.Register);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我找到问题吗?