2011-01-14 4 views
2

Я пытаюсь подключиться к базе данных и поддерживать соединение открытым для любого количества действий пользователя/запросов в базе данных. В настоящее время у меня есть соединение, которое открывается и закрывается для любого запроса (сохранение, обновление и т. Д.), Который требует, чтобы процесс входа в систему выполнялся каждый раз, когда пользователь сохраняет и т. Д. Есть ли способ просто подключиться и выйти соединение открыто, поэтому при запуске запроса из-за процесса входа в систему не будет времени запаздывания? Это то, что я использую:Как сохранить соединение odbc открытым в vb.net

Private sConStrFormat As String = "Provider=TDOLEDB;Data Source=TDDEV;Persist Security Info=True;User ID={0};Password={1};Default Database=bcpm_ddbo;Session Mode=ANSI;" 


    Private Sub cmdsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdsave.Click 


     Dim sSQL As String 
     Dim sConStr As String 

     Dim user As String 
     Dim pass As String 
     user = txtuser.Text 
     pass = txtpass.Text 

     Dim UserName As String = user 
     Dim Password As String = pass 

     sConStr = String.Format(sConStrFormat, UserName, Password) 
     Using Con As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(sConStr) 
      Con.Open() 
      sSQL = "INSERT INTO LTC_FBS (CLM_NUM) VALUES ('" & Me.txtClaim.Text & "')" 
      Dim cmdins As New System.Data.OleDb.OleDbCommand(sSQL, Con) 
      cmdins.ExecuteNonQuery() 

      Con.Close() 

     End Using 


    End Sub 

ответ

2

.NET автоматически поддерживает connection pool для вас. According to MSDN, когда вы звоните Close() на Connection рамку

освобождает подключение к пулу соединений, или закрывает соединения, если соединение пулы отключено

+0

, так что вы говорите, пока я не закрываю соединение, он останется открытым, и я могу просто использовать SQL = «.....» в любом месте приложения? – gfuller40

+0

Что я говоря, что в первый раз, когда ваше приложение используется, первый оператор SQL будет подключаться к серверу и выполнять. Когда вы вызываете close, он фактически не закрывает соединение с базой данных, он просто освобождает его в пуле соединений. оператор, который запускается (при условии, что указанная строка соединения), получит повторное использование соединения из пула не открывая его первым. Если в вашей базе данных есть возможность отслеживать это, вы увидите, что соединения на самом деле постоянно приходят и уходят. –

+0

Так что продолжайте кодирование точно так же, как и сейчас. Вы можете узнать больше о пуле соединений и о том, как настроить его здесь: http://aspalliance.com/1099_Understanding_Connection_Pooling_in_NET.2 –

0

Вместо определение «CON» в оператор using, определите его выше как статическую переменную. Когда функция вызывается, вы можете увидеть, было ли установлено «Con» или нет. Если нет, вы создаете строку соединения и устанавливаете Con = New OleDBConnection и открываете ее. Поскольку это статическая переменная, она сохранит свое значение при следующем вызове. Убедитесь, что это не что иное, и сразу же используйте его. Убедитесь, что вы не вызываете «закрыть» в подпрограмме или соединение не останется открытым.

1

В vb.net 4,5 выполните следующие действия:

На вершине сразу после класса DEFINER поставить в этой строке:

Public Shared conn As OdbcConnection 

Тогда в подлодках, где вы хотите использовать использование соединения эта линия:

If conn Is Nothing Then conn = New OdbcConnection(<your_connection_string>): conn.Open() 

Тогда новый OdbcCommand будет использовать существующее соединение, не открывая новую. Не закрывайте соединение в своем скрипте, пока не убедитесь, что закончили с ним (_Shutdown - хорошее место, и вам хорошо идти.

Это также решает проблемы с MySQL при постоянном открытии новых подключений ошибка max connections.

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