1)我想知道sql server如何在客户端和数据库之间建立通道.我想必须有一个频道,为什么sql server可以通过该频道向客户端发送通知.请详细讨论这个问题.因为我看到很多关于sql依赖的文章,但每个机构都给出了代码,但没有机构解释它是如何工作的细节.什么是服务经纪人?
Service Broker体系结构允许您构建松散耦合的SQL Server实例,以便实例使用正常的消息传递方式相互通信.Service Broker使用TCP/IP从网络传输消息,因此允许加密消息传递.它既适用于使用SQL Server实例的应用程序,也适用于将工作分配到多个SQL Server实例的应用程序.Service Broker允许使用Queue来保存消息,因此消息将被逐个处理,而调用者无需等待接收消息.
1)我想知道服务代理总是以加密格式传递消息?
2)Service Broker允许使用Queue来保存消息.服务代理使用的队列名称是什么.我如何才能看到该队列中存储的内容?
3)我看到很多人创建队列,但没有提到他们创建的原因?他们也没有在代码中使用该队列.这是一个网址和示例代码
http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/
CREATE QUEUE NameChangeQueue;
CREATE SERVICE NameChangeService ON QUEUE NameChangeQueue ([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO YourUserName;
ALTER DATABASE YourDatabaseName SET ENABLE_BROKER;
Run Code Online (Sandbox Code Playgroud)
他们从不使用NameChangeQueue队列为什么?我怎么知道谁将使用这个队列?
4)即使我看到人们创造角色但却不知道为什么在这种情况下需要角色?
所以请详细讨论我的所有要点,因为我需要了解所有要点.谢谢
我试图检测是否对我正在使用的 SQL 表进行了任何更改。我只需要通过选择特定记录来指定搜索,因此我需要使用字符串参数。我明白,根据这个 MSDN 文件:
The statement must not contain conditional statements that cannot change and cannot return results (for example, WHERE 1=0)
有没有办法在使用时包含字符串参数SqlDependency?
如果它意味着什么,我使用SQL Server 2012和VS 2010
到目前为止,这是我的代码。
代码输出"The above notification query is not valid."::
using System.Data;
using System.Data.SqlClient;
namespace AutoRegSession
{
public partial class RoomActiveSession : Form
{
public Timer timer = new Timer(); //Timer to measure update times
public string SessionID; //String to hold selected sessionID
string ConnStr …Run Code Online (Sandbox Code Playgroud) 我在使用SQL Server通知时遇到问题.我正在ASP.net中开发一个Web应用程序,其中一个页面需要通知SQL Server数据库中某个表中的新条目.我正在使用SQL Server Notification服务和Signal R来实现此功能.我的网页似乎可以正常工作,获取有关新数据条目的更新.
刷新使用通知的页面时会出现问题.我发现数据库中单个条目的通知数量会因刷新次数而增加.因此,如果我刷新页面三次,我会收到一个条目的3个通知.我担心如果连接用户的数量增加,这对服务器来说会是一个负担.此外,如果在处理使用新条目更新页面的请求时出错,则用户会收到具有相同文本的多个错误消息.我尝试调试我的代码,发现SqlDependency所使用的对象的on change事件每次都会被激活多次,每次都有不同的ID.以下是我的代码使用通知的简要概述 -
我正在使用SQL Server 2012并enable_broker为数据库设置.
在global.asax,我正在使用application_start和application_stop事件开始和停止SqlDependency.
在页面代码中,我SqlDependency使用命令对象在页面加载上设置新对象,以监视表的确切数据字段.
当onchange的SqlDependency对象火灾,我使用通知信号R毂类的UI.然后我删除对象的OnChange处理程序SqlDependency,调用SqlDependency.Stop(connectionstring),将SqlDependency对象设置为空,调用SqlDependency.Start(connectionstring)并最终SqlDependency使用命令对象再次设置对象以获取更新的数据.整个设置为no-stop-start-reset对象是继续监视数据的变化.
上面的步骤工作正常,但是当我刷新页面时,会重复刷新的次数.我通过更改代码和调试尝试了很多东西,但似乎没有解决问题.现在我想知道它是否是我错过的某个地方.
请帮我解决这个问题.如果需要任何其他信息,如环境,编码细节等,请告诉我.
此致,Tanmay
我正在尝试使用server_broker功能从sqlserver获取更改的值.
我的代码如下
protected void Page_Load(object sender, EventArgs e)
{
GetData2();
}
private void GetData2()
{
List<Masa> lst = new List<Masa>();
using (SqlConnection con = Baglan.Sql)
{
string sql = "SELECT [Id],[Ad],[Durum] FROM [dbo].[Masa]";
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
SqlDependency dependency = new SqlDependency(cmd);
dependency.OnChange += new OnChangeEventHandler(dependency_OnDataChangedDelegate);
using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
Masa alt = new Masa
{
Ad = reader["Ad"].ToString(),
Id = reader["Id"].ToString(),
Durum = reader["Durum"].ToString()
};
lst.Add(alt);
}
gridMasa.GetStore().DataSource = …Run Code Online (Sandbox Code Playgroud) 使用 SQLDependency 需要什么权限?我在网上查过书,但在这一点上不清楚。
我有一个mssql表,可以保存聊天信息.它具有计算列,具有数百万行,并由第三方应用程序使用/填充.现在我想使用此表在我的网站上显示聊天记录,并且将来有可能使用signalr发送消息.我使用sqldependency进行了几次测试,它只能用于我的情况下无法帮助的特定查询(我必须排除计算列,不能按最后一次msg排序,不能设置前100条消息等)
那么我的问题是什么呢?使用每隔x秒轮询数据库的Web服务?
旁注,我根本没有影响桌子.
我们有一个Web应用程序,它包含一个带有UI的3层后端(Controller/Biz/Data).我们的数据层单独负责从数据库实例(SQL)中提取数据,业务层向数据发送消息并创建派生属性,控制器负责将这些更改发送到UI.
我们需要在我们的应用程序中进行实时更新,必须在数据库级别(而不是控制器级别)进行跟踪.
我们选择使用SQL Dependency和SignalR作为我们的解决方案.
我所研究的有关SignalR和SQL依赖关系的所有内容都在数据库级别,其中SQL依赖关系将识别数据层中的所有更改和广播.出于显而易见的原因,此方法将绕过在业务层中创建的派生属性,并为我们提供不同的查找对象.
我能想到的唯一解决方案是使用SQL依赖关系来跟踪更改,将它们转储到某个表/对象中,然后使用轮询从控制器,商业层,数据层和备份中获取.
我创建了一个通知服务,SqlDependency用于通知其他服务有关特定表中的更改.这是在Visual Studio的Windows服务模板中完成的.因此,在该OnStart事件中,SqlDependency创建订阅,并且在OnStop事件期间,完成取消订阅.
上述解决方案工作得很好.
现在,由于某些原因,我必须将其作为WCF类库项目并将其作为Windows服务托管.我无法想到SqlDependency在这种情况下可以进行订阅和取消订阅的地方.
启动Windows服务时,必须自动完成订阅.
注意:我有一个通用的Windows服务主机,它将托管我所有的WCF类库项目,并且在那里做不了多少.
这有什么解决方案或解决方法吗?
考虑这个例子:
INSERT INTO [Table] (column1)
SELECT value1
Run Code Online (Sandbox Code Playgroud)
如果我要在SSMS中执行此命令,关于ac#forms应用程序,为了识别此事件,我需要做些什么?像显示MessageBox此事件发生时的应用程序一样简单.我似乎无法解决这个问题或找到任何有用的数据.我试图使用,SqlDependency但没有运气.如果那是我需要走的道路,有人能帮我理解这个概念好一点吗?
我当前正在将SqlDependency与SQL Server 2012 Service Broker一起使用,并且希望能够配置两台服务器,既可以侦听Service Broker并提取队列,但消息总数应仅从队列中提取一次。每台机器都应尝试降低其能力,但是如果有太多机器进来,则应平衡其能力。现在,我启动该程序的两个实例,并且都在侦听。一旦添加了新消息,它们都会从队列中提取同一条消息并运行代码。
SqlDependency不是我想要做什么的解决方案吗?什么是更好的解决方案呢?
sqldependency ×10
c# ×8
sql-server ×4
sql ×3
asp.net ×2
signalr ×2
ext.net ×1
listener ×1
parameters ×1
wcf ×1
winforms ×1