我开发这个应用程序VB.net 2010和SQL 2008.
我希望通知客户端有关db的更新,以及用于使用计时器检查db在指定分钟内的更改的应用程序,这实际上效率不高.我读到query notification,sqldependency,service broker,但后来我读到的东西,说他们可能不是有效的,如果我有100个客户,我使用查询通知推送通知我的申请.
有人会帮我解决我应该做的事情,以及如何做到这一点(如果可以提供示例,将会非常有用).提前致谢!
sql-server service-broker push-notification sqldependency query-notifications
我目前正在为我们的网站实施缓存机制.我想使用SQL Cache依赖功能.我在管理工作室运行以下命令,但它无法正常工作.
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "my_server_name\ASPNET"
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Cannot find the user 'my_server_name\ASPNET', because it does not exist or you do not have permission.
Run Code Online (Sandbox Code Playgroud)
我尝试使用特定数据库的管理员登录我正在为机器管理员设置通知,sa和windows身份验证.还尝试以管理员身份运行管理工作室,但仍然不高兴.有人可以指出我正确的方向.谢谢!
当我使用datetime列过滤器执行查询时
WHERE [Order].CreatedOn >= @CreatedOn
Run Code Online (Sandbox Code Playgroud)
使用a SqlDependency,对数据源的更改将触发SqlDependency.OnChange事件,但SqlDataReader与之关联的SqlCommand不会返回数据(reader.HasRows始终返回false).
当我只是将我的SQL语句中的过滤条件更改为
WHERE [Order].StatusId = 1"
Run Code Online (Sandbox Code Playgroud)
它只是工作正常和SqlDataReader返回数据(reader.HasRows返回true)
码:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SignalRServer
{
public partial class DepartmentScreen : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var u = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var UserName = u.Translate(Type.GetType("System.Security.Principal.NTAccount")).Value;
CheckForNewOrders(DateTime.Now);
}
private void CheckForNewOrders(DateTime dt) …Run Code Online (Sandbox Code Playgroud) SQL Server Query Notifications 是一个很棒的工具,但它似乎没有很好地扩展。每个想要/需要通知的应用程序都必须在它需要通知的持续时间内(通常是应用程序运行的整个时间)保持与数据库的开放连接。
我对创造性的解决方案持开放态度。在我的脑海里,我只是想在服务器上放置一项服务,该服务将订阅 SQL Server 查询通知,然后可以通知客户端应用程序。在这种情况下,您只打开了 1 个数据库连接(为什么不一直打开它),然后您的客户端应用程序可以订阅该服务以获取通知。
想法??
我正在使用ZEOS组件连接到(古老的)MDB数据库.
我正在进行查询,读取大量数据以桥接到不同的数据库.
有没有办法以百分比表示进度?
procedure TForm13.ActionReadInMemoryExecute(Sender: TObject);
var
QueryLine: string;
FullQuery: string;
Tablename: string;
i: integer;
begin
i:= 0;
TableMeter.DisableControls;
try
TableMeter.First;
FullQuery:= '';
while not TableMeter.eof do begin
Tablename:= TableMeter.FieldByName('tabelnaam').AsString;
QueryLine:= ReplaceStr(ImportQuerySjabloon, cTabelname, Tablename);
FullQuery:= FullQuery + QueryLine;
if (TableMeter.RecNo < (TableMeter.RecordCount -1)) then begin
FullQuery:= FullQuery + ' UNION ALL ';
end;
TableMeter.Next;
end; {while}
QueryImportMeterreadings.Close;
QueryImportMeterreadings.SQL.Text:= FullQuery;
QueryImportMeterreadings.Open; <<-- takes a long time
finally
TableMeter.EnableControls;
end;
end;
Run Code Online (Sandbox Code Playgroud)
有没有办法表明查询的进度,或者只有在我拆分各个查询并消除查询时才能这样做UNION.
运行大约需要1分钟,涉及8个工会.
我没有看到任何可以用于此目的的事件:
或者我应该在查询中的字段上伪造一个OnCalcField来执行此操作(不确定原则上是否会起作用).
或者附上一个序列?nope,在Access DB上提供不受支持的操作
有没有办法在SQL Azure数据更改或插入新数据时收到通知?我想向ASP.NET Web应用程序发送通知并将通知推送到Windows Phone.我知道SqlDependency类和Query通知用于监视SQL Server 2008数据库数据更改,但SQL Azure尚不支持这一点.
asp.net sqldependency windows-phone query-notifications azure-sql-database
我想将数据从数据库推送到应用程序,而不是应用程序提取数据。我已经安装了ms sql服务器和apache tomcat服务器。我在apache tomcat中有我的应用程序,在这里我建立了数据库连接。现在,我希望数据库在有数据更新时发送数据。但是我所知道的是从数据库中获取数据不是一个好主意,因为应用程序需要监视数据库以获取更新的数据将导致每5秒触发一次查询,因此效率也不高。
我谷歌它得到一些答案,他们是查询通知在这里,SQL Server代理作业自动安排任务。如果您有其他建议,请发布。
我有一个使用Service Broker的应用程序是SQL2008。大约每天一次,数据库的性能开始受到明显的打击,并且我确定这是由于Service Broker引起的。如果我使用以下命令硬重置所有代理连接:
ALTER DATABASE [RegencyEnterprise] SET OFFLINE WITH ROLLBACK IMMEDIATE
ALTER DATABASE [RegencyEnterprise] SET ONLINE
Run Code Online (Sandbox Code Playgroud)
然后性能将恢复正常直到第二天。我还注意到,当性能很差时,运行以下查询将返回大量(当前大约为1000)处于STARTED_OUTBOUND状态的会话:
SELECT * FROM sys.conversation_endpoints
Run Code Online (Sandbox Code Playgroud)
此外,以下查询不会在其中返回任何条目:
SELECT * FROM sys.dm_qn_subscriptions
SELECT * FROM sys.transmission_queue
Run Code Online (Sandbox Code Playgroud)
在此查询返回大量项目的地方,性能似乎还不错。唯一有问题的时间是当STARTED_OUTBOUND的连接停留在此状态时。
我对SQL Server 2008实例上的Service Broker所做的唯一配置是运行以下命令:
ALTER DATABASE RegencyEnterprise SET ENABLE_BROKER
Run Code Online (Sandbox Code Playgroud)
浏览SQL错误日志,我也找到了1000多次:
07/11/2013 01:00:02,spid27s,Unknown,The query notification dialog on conversation handle '{6DFE46F5-25E9-E211-8DC8-00221994D6E9}.' closed due to the following error: '<?xml version="1.0"?><Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker/Error"><Code>-8490</Code><Description>Cannot find the remote service 'SqlQueryNotificationService-cb4e7a77-58f3-4f93-95c1-261954d3385a' because it does not exist.</Description></Error>'.
Run Code Online (Sandbox Code Playgroud)
尽管我相信我可以通过在数据库中创建一个主密钥来解决此错误,但在整个日志中我也经常看到该错误十二次。
06/26/2013 14:25:01,spid116,Unknown,Service Broker needs to access the master key in …Run Code Online (Sandbox Code Playgroud) 我已经在网上搜索了一段时间,但到目前为止还没有运气。是否可以在 JAVA http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCach中实现?JDBC for SQL Server 2012 是否支持它?
提前致谢!
我有一个在具有SqlDependency/查询通知的服务器上运行的应用程序- 监视不同服务器上的表的更改.
它工作正常,直到我们重新启动/重新启动SQL Server.由于某些维护和修补程序重新启动SQL Server时,另一个应用程序将引发以下错误并停止.我可以肯定地说它停止了,因为一旦SQL Server启动并运行它就不会监视更改.
我必须重新启动应用程序才能重新订阅查询通知.我没有在代码中抛出任何会阻止应用程序的异常.我正在捕捉异常并发送电子邮件.
System.Data.SqlClient.SqlException(0x80131904):将请求发送到服务器时发生传输级错误.(提供者:TCP提供者,错误:0 - 远程主机强制关闭现有连接.)--->
System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.
我是SqlDependency/查询通知的新手,所以我不确定这是否是预期的行为或我做错了什么.这是我的理解(从其他帖子(SqlDependency Reliablity?)我不必重新启动作业重新订阅.
感谢您的时间和答案
我正在与SQLDependency班级一起探索查询通知。构建一个简单的工作示例很容易,但我觉得我错过了一些东西。一旦我跨过一个简单的单表/单依赖项示例,我就想知道 如何找出哪个依赖项触发了我的回调?
我在解释时遇到了一些麻烦,所以我在下面提供了一个简单的示例。当AChange()被调用时,我无法查看依赖项内的 sql,并且我没有对关联缓存对象的引用。
那么男孩该做什么呢?
Id属性和并行跟踪结构我只是错过了什么吗?这是结构上的缺陷吗SQLDependency?我已经看过 20 篇关于这个主题的不同文章,它们似乎都有相同的漏洞。建议?
代码示例
public class DependencyCache{
public static string cacheName = "Client1";
public static MemoryCache memCache = new MemoryCache(cacheName);
public DependencyCache() {
SqlDependency.Start(connString);
}
private static string GetSQL() {
return "select someString FROM dbo.TestTable";
}
public void DoTest() {
if (memCache["TEST_KEY"] != null ) {
Debug.WriteLine("resources found in cache");
return;
}
Cache_GetData();
}
private void Cache_GetData() { …Run Code Online (Sandbox Code Playgroud) sql-server ado.net sqldependency sql-server-2008-r2 query-notifications