我使用以下查询设置了SqlDependency: string sql = "SELECT dbo.Case.CMRID, dbo.Case.SolutionID, dbo.Case.CreateDT, dbo.Case.ModifyDT "+ "FROM dbo.Case "+ "WHERE dbo.Case.ModifyDT @LastExecutionDateTime"; 执行此查询会导致OnC
string sql = "SELECT dbo.Case.CMRID, dbo.Case.SolutionID, dbo.Case.CreateDT, dbo.Case.ModifyDT " + "FROM dbo.Case " + "WHERE dbo.Case.ModifyDT > @LastExecutionDateTime";
执行此查询会导致OnChanged事件持续触发,其类型为Invalid和Source of Statement.我进一步研究后发现,当您的查询违反与索引视图规则相同的规则时会发生什么,因为这是此通知机制所基于的.
检查Special Considerations Using Query Notifications (ADO.NET)我没有看到任何违反此声明的规则.
将语句修改为
string sql = "SELECT dbo.Case.CMRID, dbo.Case.SolutionID, dbo.Case.CreateDT, dbo.Case.ModifyDT " + "FROM dbo.Case";
工作正常吗? OnChanged事件仅在适当时触发,并且具有正确的类型集.
那么,我怎样才能返回自上次执行语句以来具有修改日期的记录?
ModifyDT是什么类型的?QN的ADO.Net参考不完整,完整列表位于Creating a Query for Notification的SQL参考中.后者还列出了以下内容:
The statement must not have comparison
or expression based on double/real
data types.
另一个问题可能是在查询中发生从字符串到日期时间的转换,这可能被认为是非确定性的(这是ADO.Net和SQL规范列出的标准).请尝试使用类型化参数:WHERE ModifyDT> @lastDateTime并传入DateTime类型的参数.