加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:34:41 所属栏目:百科 来源:网络整理
导读:我使用以下查询设置了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事件持续触发,其
我使用以下查询设置了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.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类型的参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读