2015-08-11 2 views
0

У меня есть простое приложение для форм Windows VB.net. У меня есть метод для открытия соединения с базой данных. Я использую два подключения MySql. В приведенном ниже методе видно, что мое первичное соединение открыто, и после этого открывается мое вторичное соединение. Оба соединения имеют разные строки соединений, но в очень редких случаях эти строки подключения могут быть одинаковыми, так что я не хочу открывать соединение дважды.Использование одного соединения, когда строка соединения одинакова

Dim MySqlConnPrimary As New MySqlConnection 
Dim MySqlConnSecondary As New MySqlConnection 

Public Sub OpenConnection(ByVal strConnectionStringPrimary As String, ByVal strConnectionStringSecondary As String) 

    Try 
     With MySqlConnPrimary 
      .ConnectionString = strConnectionStringPrimary 
      .Open() 
     End With 

     With MySqlConnSecondary 
      .ConnectionString = strConnectionStringSecondary 
      .Open() 
     End With 

    Catch ex As Exception 

    End Try 
End Sub 

В основном строки подключения будут различными, но в случае, если строки подключения одинаковы, то я не хочу, чтобы открыть ПОДСОЕДИНЕНИЙ несколько раз. Как мне это достичь? Должен ли я назначить MySqlConnPrimary MySqlConnSecondary, если строки подключения одинаковы?

+0

Вы можете проверить состояние соединения, используя Имущество, названное: 'MySqlConnPrimary.ConnectionState' Проверьте его, используя if..else блок и код необходимые действия в соответствии с ним. – Mahadev

+0

@ Махадев Спасибо за ваш быстрый ответ. Я хочу, чтобы, если строки подключения одинаковы, то и MySqlConnPrimary, и MySqlConnSecondary должны использовать 1 соединение, чтобы они открывались только один раз. –

+0

Вы не должны открывать соединение; вместо этого откройте, выполните операцию, закройте. Это может устранить проблему. ([Объединение пулов] (https://en.wikipedia.org/wiki/Connection_pool) используется, чтобы сделать его эффективным.) –

ответ

1

Очевидным и простым ответом является то, что строка сравнивает строки подключения и повторно использует соединение, если они одинаковы.

В псевдокоде:

If string.Equals(strConnectionStringPrimary,strConnectionStringSecondary) 
    MySqlConnSecondary = MySqlConnPrimary 
Else 
    With MySqlConnSecondary 
     .ConnectionString = strConnectionStringSecondary 
     .Open() 
    End With 
End If 

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

+0

@J R Спасибо. То, что я искал. Я думал то же самое, но не был уверен, что это элегантный способ достижения. –

+0

Я не думаю, что есть элегантный способ решить ближайшую проблему, о которой вы просите о помощи, вне пересмотра вашей архитектуры. Обычная парадигма заключается в том, чтобы открыть соединение, выполнить некоторую работу, а затем закрыть соединение. Другое примечание, которое я хотел бы оставить, - это не просто использовать оператор «==», а оператор, подходящий для вашего рабочего процесса - возможно, метод string.Compare (string, string), если вы решите сохранить свою текущую методологию –

Смежные вопросы