sql依赖查询在c#中抛出无效的sql,但是在sql server management studio中工作

时间:2015-12-03 09:26:23

标签: sql .net sql-server sqldependency

检查依赖项的SQL查询在运行时抛出无效并在sql server management studio中提供结果。有人可以帮助找出问题所在。

我需要使用SUM来显示最终结果

 public void GetAllTicket()
    {
        List<DashboardModel> resultlist = new List<DashboardModel>();

        using (SqlConnection connection = new SqlConnection(_connString))
        {
            string query = "SELECT SUM(CASE WHEN  [AssignedStaffID] = 8 and [IsAssignedStaffOverridden] = 0 THEN 1 ELSE 0 END) myticket,SUM(CASE WHEN [AgentGroupID] = 1 THEN 1 ELSE 0 END) agentgroup,SUM(CASE WHEN [AssignedStaffID] = 0 AND [AgentGroupID] = 1 THEN 1 ELSE 0 END) newticket,SUM(CASE WHEN [AssignedStaffID] = 8 AND [TicketStatusID] = 2 THEN 1 ELSE 0 END) resolvedticket FROM  [dbo].[Ticket]";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Notification = null;
                SqlDependency dependency = new SqlDependency(command);
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                connection.Open();
                DataTable dt = new DataTable();
                SqlDataReader reader = command.ExecuteReader();

                dt.Load(reader);

                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        resultlist.Add(new DashboardModel
                            {
                                MyTicketCount = int.Parse(dt.Rows[i]["myticket"].ToString()),
                                AgentGroupTicketCount = int.Parse(dt.Rows[i]["agentgroup"].ToString()),
                                NewTicketCount = int.Parse(dt.Rows[i]["newticket"].ToString()),
                                ResolvedTicketCount = int.Parse(dt.Rows[i]["resolvedticket"].ToString())
                            });
                    }
                }

            }
        }
        NotifyAllClients(resultlist);
    }

我的电子邮件地址无效

    public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Info == SqlNotificationInfo.Invalid)
        {
            Console.WriteLine("The above notification query is not valid.");
        }

        if (e.Type == SqlNotificationType.Change)
        {         
            GetAllTicket();
        }

    }

1 个答案:

答案 0 :(得分:1)

这不是SqlDependency的有效查询,因为您使用聚合(SUM),但没有group by子句。有关SqlDependency的Microsoft文档是此页面: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency%28v=vs.110%29.aspx

它说

  

仅支持满足特定要求列表的SELECT语句的查询通知。

有一个非常有用的页面链接,详细列出了所有这些要求,可以在这里找到: https://msdn.microsoft.com/library/ms181122.aspx

有一节关于&#34;支持的SELECT语句&#34;有这个小宝石:

  

除非语句使用GROUP BY表达式,否则SELECT语句中的投影列可能不包含聚合表达式。

可能是您的查询还存在其他规则,这些规则在代码中并不是很明显(例如,dbo.tickets是一个视图吗?)。