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

Mat*_*nes 3 c# sql-server-2005 .net-3.5 sqldependency

我使用以下查询设置了SqlDependency:

string sql = "SELECT dbo.Case.CMRID, dbo.Case.SolutionID, dbo.Case.CreateDT, dbo.Case.ModifyDT "
+ "FROM dbo.Case "
+ "WHERE dbo.Case.ModifyDT > @LastExecutionDateTime";
Run Code Online (Sandbox Code Playgroud)

执行此查询会导致OnChanged事件持续触发,其类型为Invalid和Source of Statement.我进一步研究后发现,当您的查询违反与索引视图规则相同的规则时会发生什么,因为这是此通知机制所基于的.

使用查询通知检查特殊注意事项(ADO.NET)我没有看到任何违反此语句的规则.

将语句修改为

string sql = "SELECT dbo.Case.CMRID, dbo.Case.SolutionID, dbo.Case.CreateDT, dbo.Case.ModifyDT "
+ "FROM dbo.Case";
Run Code Online (Sandbox Code Playgroud)

工作正常吗?OnChanged事件仅在适当时触发,并且具有正确的类型集.

那么,我怎样才能返回自上次执行语句以来具有修改日期的记录?

Rem*_*anu 5

ModifyDT是什么类型的?

QN的ADO.Net参考不完整,完整列表位于创建查询通知的SQL参考中.后者还列出了以下内容:

该语句不得基于双/实数据类型进行比较或表达.

另一个问题可能是在查询中发生从字符串到日期时间的转换,这可能被认为是非确定性的(这是ADO.Net和SQL规范列出的标准).请尝试使用类型化参数:WHERE ModifyDT > @lastDateTime并传入DateTime类型的参数.