从SqlDependency中获取数据我有一个表和一个SqlDependency在等待新的插入。OnChange会根据需要触发,但我不明白是否有可能获取导致数据库更改的行。SqlDependencysql命令:SqlCommandcmd=newSqlCommand("SELECTidFROMdbo.DataRequests",m_sqlConn);OnChange代码:privatevoidOnChange(objectsender,SqlNotificationEventArgse){SqlDependencydependency=senderasSqlDependency-OnChange.OnChange.OnChange;depConsole.WriteLine("信息:"+e.Info.ToString());Console.WriteLine("来源:"+e.Source.ToString());Console.WriteLine("类型:"+e.Type.ToString());Console.WriteLine(DateTime.Now);获取信息();没有关于导致触发依赖项的行的信息。我想作为一种解决方法,您始终可以在记录中添加时间戳并跟踪上次触发事件的时间。看看这个组件:SqlTableDependency对于对SQLServer数据库表执行的每个更改,C#代码都会收到一个事件,其中包含已更改的RECORD列表。根据这个帖子,你不能:http://social.msdn.microsoft.com/Forums/en-US/sqlservicebroker/thread/07234067-73e1-4db5-a4e6-0f9f0bae22ae/你只能缩小通知原因使用SqlNotificationEventArgs提供的属性在这里找到了一个非常简洁的解决方案我希望这对您有所帮助:stringcommandString=string.Format("SELECT[Id]FROM[dbo].[Tech]");command=newSqlCommand(commandString,connection);privatevoiddependency_OnChange(objectsender,SqlNotificationEventArgse){SqlDependencydependency=(SqlDependency)sender;dependency.OnChange-=dependency_OnChange;this.Dispatcher.Invoke((System.Action)(()=>{if(e.Info.ToString().ToLower().Trim()=="insert"){GetData();intNewTechID=TechIDs。最后的();}}));}privatevoidGetData(){command.Notification=null;SqlDependency依赖=newSqlDependency(命令);dependency.OnChange+=newOnChangeEventHandler(dependency_OnChange);命令.Connection.Open();使用(SqlDataReaderreader=command.ExecuteReader()){while(reader.Read()){TechIDs.add(int.Parse(reader.GetValue(0).ToString()));}reader.Close();}command.Connection.Close();您可以使用Temp表首先,您需要创建一个临时表,其中包含您需要继续调查.类似于:CREATETABLE##TempTab([field1][varchar](50)NULL,[field2][varchar](50)NULL}请注意,在外部cose中创建的表会自动删除,因为创建者程序已退出,因此您不需要不需要把它放在formClosing上......现在,在设置sqlDepency之后你需要填充临时表,这里有一些类似于开始场景的快照。然后,每次onChange事件触发时,你只需将临时表与更新的案例。它可能是这样的:select*from##temptableleftouterjoinmytableON##temptable.field1=myTable.field1AND##temptable.field2=myTable.field2WHEREmyTable.field2isnull这将给出你刚刚删除的所有行(或用旧值添加。)另一方面:从mytable中选择*左外连接##temptableON##temptable.field1=myTable.field1AND##temptable.field2=myTable.field2WHERE##temptable.field2isnull将为您提供刚刚添加的所有行(或使用新值更改)。比较后,您只需要使用新值更新临时表(更快的方法是删除所有内容并插入所有值)当然,如果您的程序将由不同的用户同时运行,您将需要在临时表中处理用户ID。以上就是C#学习教程:从SqlDependency获取数据共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
