C # присоединяет слушателя к соединению Npgsql - PullRequest
0 голосов
/ 31 октября 2018

Я создаю приложение на C #, которое использует соединение npgsql для запросов в базе данных postgres. Я хочу знать, есть ли способ получать уведомления на всех этапах выполнения запроса; Я имею в виду, я хочу получать сообщения:

  • «открыто»: когда соединение открыто
  • «подключение»: при подключении
  • "выполняется": когда выполняется соединение
  • «закрыть»: когда запрос выполнен и соединение закрыто

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы хотите отловить событие StateChange? Надеюсь, что это укажет вам правильное направление.

    Dim csb = New NpgsqlConnectionStringBuilder(GetConnectionString(connectionName))
    csb.CommandTimeout = 0
    Using connection = New NpgsqlConnection(csb.ConnectionString)
        AddHandler connection.StateChange, AddressOf myHandler  ' <== This is where you specify the event Handler
        Using transaction = connection.BeginTransaction()
            ' Do your thing here.
            transaction.Commit()
        End Using
    End Using
End Sub


' This function will get called whenever the connection state changes.
Private Function myHandler(sender As Object, e As StateChangeEventArgs) As Object
    ' Do something here
End Function
0 голосов
/ 31 октября 2018

Вы можете сделать это, но вы должны сами инициировать уведомления. Это выполнимо и даже легко. В ADO.NET у вас есть поток кода, похожий на:

DbProviderFactory factory = DbProviderFactories.GetFactory("Npgsql");
using(DbConnection con = factory.CreateConnection()) 
{
      con.ConnectionString = ConfigurationManager.AppSettings[connectionName];
      con.Open();  
      // Connection is open, notify user
      DbCommand cmd = connection.CreateCommand();
      cmd.CommandText = query; 

      // Query execution is going to start, add code to inform user
      cmd.ExecuteXXX();
      // Query execution is done, add code to inform user
}

// the connection is closed - notify user

Уведомления должны быть асинхронными, чтобы избежать блокировки кода базы данных, вы можете реализовать их с помощью событий.

...