tags:

views:

15

answers:

1

I'm starting to put in a database into my application, however I'm drawing a blank on how to share a database connection among the dozen or so different forms in my MDI application. I'm assuming this has to do with interfaces or something but I can't find any relevant examples anywhere. Can someone help me out? Ideally what I'd like is when the app is loaded up there is a call to a function in the forms loading area which establishes a single connection to the mdb, that I can then call via any form so I don't always have to open/close connections everytime I need to update the db (assuming what I'm suggesting is better for overhead), unless that is a better option?

Here's a basic example of the mdb database access code I've got working:

    Dim dt As DataTable = New DataTable()
    Dim OleDbTran As OleDbTransaction = Nothing

    Using connJET As OleDbConnection = New OleDbConnection("connection string here...")
        Try
            connJET.Open()
            Dim sqlCount As OleDbCommand = New OleDbCommand("select * from mytable", connJET)
            Using aReader As OleDbDataReader = sqlCount.ExecuteReader()
                dt.Load(aReader)
            End Using

            If (dt.Rows.Count > 0) Then
                MsgBox(dt.Rows.Count)
            End If

            OleDbTran = connJET.BeginTransaction()
            Dim aCommand As OleDbCommand = connJET.CreateCommand()
            aCommand.CommandText = "INSERT INTO Programs (title) VALUES (@title)"
            aCommand.Transaction = OleDbTran

            aCommand.Parameters.Add("@title", OleDbType.VarChar)
            aCommand.Parameters("@title").Value = "Test"

            aCommand.ExecuteNonQuery()
            OleDbTran.Commit()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Using
A: 

Assuming that you create the connection in your startup form, then you could just add constructors to the other forms that accept a SqlConnection and send that in whenever you create an instance of that form.

Or if you prefer, you create something like this:

Public Class Connection
    Private Shared connection As OleDb.OleDbConnection

    Public Shared ReadOnly Property Instance As OleDb.OleDbConnection
        Get
            If connection Is Nothing Then
                connection = New OleDb.OleDbConnection("connstring")
            End If
            Return connection
        End Get
    End Property
End Class

And then you could access it by just calling Connection.Instance whenever you need it.

ho1
this solved my problem, thanks!
Joe