当前位置 : 主页 > 编程语言 > c语言 >

c# – 不允许使用WHERE子句的SqlDependency查询.如何修改它才有效?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我使用以下查询设置了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
我使用以下查询设置了SqlDependency:

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类型的参数.

网友评论