Задать вопрос

Как отслеживать изменения в DB MS SQL 2008 на C# через Service Broker?

Приветствую. Никак не могу разобраться с вопросом отслеживания изменений в базе данных.

Имеется:
  • Приложение, написанное на C#
  • SQL Server, с базой данной на 3 таблички
В программе делаю следующее:
public Main_Form()
{
   InitializeComponent();
   
   SqlDependency.Stop(connectionString);
   SqlDependency.Start(connectionString);
   ScoutingSQL();

   DataGridView_Load();
}

//  создаем dependency и подписываем его на событие
// которое должно вызвать Service Broker 
private void ScoutingSQL()
{
   SqlConnection connection = new SqlConnection(connectionString);
   connection.Open();
   SqlCommand command = new SqlCommand("SELECT sentDate, verificationDate, verifiedTo", connection);
   SqlDependecy dependency = new SqlDependency(command);
   dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
}

// метод, вызванный событием
void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
   DataGridView_Load();
}

// Загружаем данные из sql бд в наш грид
public void DataGridView_Load()
{
   while(dataGridView1.Rows.Count > 0)
      for (int i = 0; i < dataGridView1.Rows[i]);
      {
         dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
      }
   string tableName = "[staff_106].[dbo].[staff]"
   string querry = ("SELECT * FROM" + tableName + "");
   SqlConnection connection = new SqlConnection(connectionString);
   SqlDataAdapter dataAdapter = new SqlDataAdapter(querry, connection);
   // и тд... просто делаем  Fill из dataSet, заполняя грид.
}

Кусок для SqlDependency писал по этому примеру

В самой бд сделал ALTER DATABASE [Database_name] SET ENABLE_BROKER;
Но... по какой-то причине, по ПКМ->Свойства->Отслеживание изменений в поле Отслеживание изменений висело False. Ну, ручками переключил на True.

Запускаю приложение, меняю что-то в бд через SQL SMS и... ничего не происходит. Проверял брейкпоинтом, по событию даже не вызывается метод.

У меня появилось ряд вопросов, в ходе изучения матчасти.
1) Queue. Как узнать имя моей очереди по дефолту. Как её конфигурировать? Потому что, как я понял, у меня не совсем полный код для SqlDependency, т.к. требуется SqlDependency.Start(connectionString, queueName);
но queueName я не знаю.
2) Мне нужно только узнавать о том, были изменения или нет. Какие конкретно, мне не важно, и непонятно для чего в примере висит этот кусок:
// Execute the command.  
        using (SqlDataReader reader = command.ExecuteReader())  
        {  
            // Process the DataReader.  
        }

Точнее как, понятно, что по идее по правильному я должен подтянуть те самые изменения из Queue и уже дальше работать с ними, к примеру, ими заполнить ячейку в гриде, а не заполнять заново весь грид (но он у меня мелкий и особо я не теряю от Fill), но, вероятно, это что-то нужное, раз у меня не влзелето?
3) Как в SQL SMS проверить работает ли вообще Service Broker? Я читал про сообщения в бд, на которые должен, якобы, ответить Service Broker, но конкретного ничего не вычитал (что он должен ответить, в какой форме, куда, как смотреть этот пакет в таком случае).

Я понимаю, что вопросы крайне глупые, и надеюсь на ваше терпение.
Благодарю за любую помощь и пояснения по моему вопросу.
  • Вопрос задан
  • 687 просмотров
Подписаться 3 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы