Member 11178806 Ответов: 2

Почему зависимость SQL не запускает событие с предложением group by и top ?


привет
я работаю с зависимостями Signal r и sql . я создал одну демо-версию для такого требования, что если я обновлюсь в базе данных . он будет автоматически изменять содержимое пользовательского интерфейса. он работает нормально, но когда я пытался использовать предложение group by, top или Rownum . Событие изменения зависимости Sql не срабатывает и не отражает никаких изменений в пользовательском интерфейсе.

readonly string _connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

        public IEnumerable<productinfo> GetAllMessages()
        {
            var ProductInfo = new List<productinfo>();
            using (var connection = new SqlConnection(_connString))
            {
                connection.Open();
                using (var command = new SqlCommand(@"[dbo].[GetAllRecordsWithParams]", connection))
                {
                    command.Notification = null;
                    command.CommandType = CommandType.StoredProcedure;
                    var dependency = new SqlDependency(command);
                    SqlDependency.Start(_connString);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

                    if (connection.State == ConnectionState.Closed)
                        connection.Open();

                    var reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        ProductInfo.Add(item: new ProductInfo
                        {
                            CustomerID = (string)reader["CustomerID"],
                            ContactName = (string)reader["ContactName"],
                            Phone = (string)reader["Phone"],
                            ProductName = (string)reader["ProductName"],
                            UnitPrice = (decimal)reader["UnitPrice"],
                            IsDeleted = (bool)reader["IsDeleted"]
                        });
                    }
                    
                }
                connection.Close();
                connection.Dispose();
            }
            return ProductInfo.ToList();
        }
        private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            if (e.Type == SqlNotificationType.Change)
            {
                MessagesHub.SendMessages();
            }
        }



Изменения Sql ::
ALTER PROCEDURE [dbo].[GetMixItems] 
	-- Add the parameters for the stored procedure here
	
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	

    -- Insert statements for procedure here
	  select  dm.MessageID, dm.Message, dm.EmptyMessage, dm.Date, dt.MessageExtendedText,dt.IsRight
	   from [dbo].[Messages] as dm inner join [dbo].[TestTable] as 
	   dt on dm.MessageID  = dt.MessageTestId where IsRight = 0 
	   group by dm.MessageID, dm.Message, dm.EmptyMessage, dm.Date, dt.MessageExtendedText,dt.IsRight 
	   order by dm.MessageID desc
	  
END


Что я уже пробовал:

я перепробовал все, о чем упоминал ... пожалуйста, скажите мне решение этой проблемы. как сделать такое положение, работать с SQL зависимостей...

2 Ответов

Рейтинг:
0

Maciej Los

Класс зависимостей SQL используется для определения того, когда результаты запроса отличаются от первоначально полученных. Таким образом, если между вызовами запросов нет изменений, класс SqlDependency не будет уведомлять пользователя об изменениях.

Видеть:
Обнаружение изменений с помощью SqlDependency[^]
Класс SqlDependency (System. Data.SqlClient)[^]


Рейтинг:
0

Member 11178806

Чем за ответ. Но я уже упоминал, что если я использую предложение group by , top, distinct such и пытаюсь обновить значение из базы данных , то событие все равно не срабатывает...