2010-01-27 3 views
1

Это моя функция:Подключение к базе данных MS Access с помощью функции

Public Function DBConnection(ByVal path As String) 
    ' This function makes the database connection and returns the object 
    ' to reference it. 
    cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path + ";") 
    cn.Open() 
    Return cn 
End Function 

Как вы можете видеть, я хочу, чтобы инициализировать соединение с базой данных и вернуть его, так что я могу использовать его в своих формах. Эта функция в модуле и мои переменные следующим образом:

Public cn As OleDbConnection 
Public cmd As OleDbCommand 
Public dr As OleDbDataReader 

Но я не знаю, как я могу использовать это в своих формах, я просто вызвать функцию DBConnection, а затем продолжить мои заявления SQL? Или мне нужно что-то делать? Помощь была бы очень оценена, приветствия.

Кроме того, мне нужны некоторые мнения. Мое приложение использует базу данных MS Access. Лучше ли инициализировать соединение на , а затем закрыть соединение, когда пользователь закрывает программу или открывает и закрывает соединения по мере запуска запросов? Я планирую использовать некоторые запросы к базе данных по нескольким формам, поэтому я поместил его в модуль, но я не на 100% о том, как я должен это делать.

Спасибо.

+0

это клиентское приложение .NET, приложение или это отдельное приложение доступа? –

+0

Это приложение .NET. – Matt

ответ

0

Пара вещей. Эта функция будет открывать соединение каждый раз, когда он вызывается. Вам лучше убедиться, что вы закрываете базу данных, или что начнет накапливаться память.

Вы можете посмотреть на некоторые другие параметры (например, с помощью NHibernate или другой ORM.)

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

+0

Спасибо за ответ, эта функция будет вызываться только один раз в программе, на 'Form_Load'. Когда я использую возвращаемый cn, я просто использую его обычным способом? Например, когда я хочу запустить запрос, я просто использую 'cmd = New OleDbCommand (" blah ")'? – Matt

+0

Да, вместо создания нового соединения вы бы просто использовали cn, поэтому что-то вроде cn.Query() или любых вызовов функций, которые вам нужно использовать. – taylonr

1

От: How to bind Microsoft Access forms to ADO recordsets

Private Sub Form_Open(Cancel As Integer) 
    Dim cn As ADODB.Connection 
    Dim rs As ADODB.Recordset 

    'Use the ADO connection that Access uses 
    Set cn = CurrentProject.AccessConnection 

    'Create an instance of the ADO Recordset class, and 
    'set its properties 
    Set rs = New ADODB.Recordset 
    With rs 
     Set .ActiveConnection = cn 
     .Source = "SELECT * FROM Customers" 
     .LockType = adLockOptimistic 
     .CursorType = adOpenKeyset 
     .Open 
    End With 

    'Set the form's Recordset property to the ADO recordset 
    Set Me.Recordset = rs 

    Set rs = Nothing 
    Set cn = Nothing 
End Sub 
Смежные вопросы