【发布时间】:2015-01-05 09:39:40
【问题描述】:
我正在尝试使用 sqldependency 检查任何数据库更改,然后向连接到信号器的客户端发送一些内容。问题是,它似乎没有检测到变化。我觉得少了点什么。代码如下:
[HubName("DataHub")]
public class DataHub : Hub
{
public void pushOnChange()
{
string connection = "data source=fourthD;initial catalog=dash;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"";
SqlDependency.Start(connection);
SqlConnection connectionString = new SqlConnection(connection);
connectionString.Open();
using (SqlCommand command=new SqlCommand("SELECT * FROM dbo.insight", connectionString))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
command.ExecuteReader();
}
}
void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
Dictionary<string, string> data = new Dictionary<string, string> { };
data.Add("Id","34");
data.Add("DeviceId", "163-117")
data.Add("DeviceUserName", "Someone");
var result = new[] { data };
Clients.All.addData(result);
}
}
【问题讨论】:
-
也许你应该先读点东西?
-
此外,正确缩进代码通常被视为一种特征。缩进不正确的代码是不可读的。
-
对不起代码..有什么解决办法吗?
-
SqlDependecy 是否像 Web 应用程序一样在“断开连接”的环境中工作?我希望它只能在 Winform 应用程序中工作,你有一个不断运行的应用程序。
-
这段代码似乎是无操作的或非常种族的。如果客户端调用
pushOnChange(),您创建一个新的SqlDependency实例,然后您ExecuteReader并在dependency超出范围之后立即取消订阅事件处理程序。我认为依赖项通知发生在不同的线程上,并且(仅仅因为它使用了 db)需要一些时间来执行,所以在dependency实例存在时您不太可能(几乎不可能)收到通知。
标签: c# sql .net signalr sqldependency