sql Dependency обнаруживает изменения записей и отправляет сообщения клиентам - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь использовать sql Dependency, чтобы проверить, что данные таблицы были изменены другими клиентами. Я следил за турбулентностью здесь, но когда я пытаюсь создать очередь, я получаю следующее сообщение об ошибке, это мой код на c # и оператор sql.

Редактировать 1 Извините, я забыл включить учебник в свой первый пост, здесь есть ссылка в учебнике, в которой указано quename, но не сказано, как его создать.

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/detecting-changes-with-sqldependency

CREATE QUEUE ExportedOrdersChangeMessage CREATE SERVICE ExportedOrdersService ON QUEUE ExportedOrdersChangeMessage ([http://schemas.microsoft.com/SQL/Notification/PostQueryNotification])

Ошибка, полученная после выполнения вышеуказанного, следующая.

Сообщение 15151, уровень 16, состояние 1, строка 5 c 'http://schemas.microsoft.com/SQL/Notification/PostQueryNotification',, поскольку его не существует или у вас нет разрешения.

В основном то, что я хочучтобы быть в состоянии сделать, если пользователь пытается изменить запись, я хочу отправить уведомление другим клиентам. Это лучший метод для этого подхода, это бизнес winformsss app, если какие-либо другие библиотеки, облегчающие эту задачу, были бы хороши.

Я использую sql Server 2017 Express, который, как я полагаю, будет иметь это как стандарт? *

private void DetectChanges()
{
    // Assume connection is an open SqlConnection.  

    string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        // Create a new SqlCommand object.  
        using (SqlCommand command = new SqlCommand("SELECT exportedtoMeteor FROM dbo.exported", con))
        {
            // Create a dependency and associate it with the SqlCommand.  
            SqlDependency dependency = new SqlDependency(command);
            // Maintain the reference in a class member.  
            SqlDependency.Start(connectionString, "ExportedOrdersChangeMessage");

            // Subscribe to the SqlDependency event.  
            dependency.OnChange += new
                OnChangeEventHandler(OnDependencyChange);

            // Execute the command.  
            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Process the DataReader.  
            }
        }
    }
}

// Handler method  
void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
    // Handle the event (for example, invalidate this cache entry).  
}

void Termination()
{
    string connectionString = ConfigurationManager.AppSettings["ConnectionString"];

    // Release the dependency.  
    SqlDependency.Stop(connectionString, ExportedHacket);
}

1 Ответ

0 голосов
/ 22 сентября 2018

Я не знаю ответа на ваш прямой вопрос, но Butterfly Server .NET обнаруживает изменения в базах данных (MySQL, Postgres, SQLite, MS SQL Server и т. Д.) И позволяет создавать динамические представления на основе SELECT.операторы, которые публикуют события, если результаты SELECT меняются.Существуют предостережения (как и все операции с базой данных, которые должны выполняться через интерфейс IDatabase, предоставляемый Butterfly Server .NET).Однако это достаточно похоже на то, что вы делаете, и вас это может заинтересовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...