Mike & Doris Manning
mikedorism at verizon.net
Tue Aug 23 13:56:47 CDT 2005
Hi John, Your code looks really good. The only thing you are missing is checking the status of the connection before opening or closing it. As for your questions about the data reader...The connection and command object have to be open in order for the data reader to work. I do not open the connection or command until the data reader is needed so the flow you have makes sense to me. Doris Manning mikedorism at verizon.net -----Original Message----- From: dba-vb-bounces at databaseadvisors.com [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of John W. Colby Sent: Tuesday, August 23, 2005 11:43 AM To: dba-vb at databaseadvisors.com Subject: [dba-VB] VB.Net - Data reader class As you might have guessed from my posts, I am a real nubee to vb.net. As such I am trying to make my life easier in getting real work done. One thing I need to do a lot is to open data readers. While the absolute minimum code required to do this is not overly complex, by the time you capture errors and stuff it turns into a fair size chunk of code. Having done it once for a specific thing I was doing I pulled it out into a class so that I could just instantiate the class every time I needed to do this. Unfortunately I don't really understand the interactions between the pieces. For example should I just store the provider and datasrc into the connection string and wait. Then when a reader is requested, call back up the chain - the function requesting a reader object requests a command object, which requests a connection. Once the connection is valid the command object is created, then the reader object is created and handed back. Once all this is done, can the connection be closed? What about the command object? Can the reader be used if the connection and command object no longer exist? It seems like that is what I should be doing, especially in light of the "disconnected" thing so in vogue. The code that follows does NOT do any of that, rather creates a connection which it holds open, creates a command object which it holds open, and finally creates a reader object on request. Again, the objective of this whole exercise is to have a class that I just call passing all the right stuff, which does the work, traps and logs errors, and hands back a reader on request. The class is as follows. Please comment on it and let me know if I am missing something, making my life harder etc. Imports System.Data Imports System.Data.OleDb Public Class clsData Private mcnn As OleDbConnection Private mcmd As OleDbCommand Private mdr As OleDbDataReader Private mstrSQL As String Private mstrCnn As String Private mstrDataSrc As String Private mstrProvider As String ' 'Get the provider and data source strings 'Store them locally "just because" and to assist debugging ' Public Sub New(ByVal lstrProvider As String, ByVal lstrDataSrc As String) mstrProvider = lstrProvider mstrDataSrc = lstrDataSrc mstrCnn = mstrProvider mstrCnn.Concat(mstrDataSrc) mGetToDataSrc() End Sub ' 'Use the connection string to open a connection 'replace the messagebox with logfile ' Private Function mGetToDataSrc() mstrCnn = mstrCnn mstrDataSrc = mstrDataSrc mstrCnn += mstrDataSrc mcnn = New OleDbConnection(mstrCnn) Try mcnn.Open() MessageBox.Show("Connection opened successfully") Catch e As Exception MessageBox.Show("Connection failed to open successfully:" + e.ToString()) Exit Function End Try End Function ' 'Pass in a SQL statement 'Using the sql statement and the connection, get a command object ' Property pSQL() As String Get pSQL = mstrSQL End Get Set(ByVal lstrsql As String) mstrSQL = lstrsql Try mcmd = New OleDbCommand(mstrSQL, mcnn) Catch e As Exception MessageBox.Show("Command failed to open successfully:" + e.ToString()) Exit Property End Try End Set End Property ' 'Using the command object, get a data reader ' ReadOnly Property pDR() As OleDbDataReader Get Try mdr = mcmd.ExecuteReader pDR = mdr Catch e As Exception MessageBox.Show("Command failed to open successfully:" + e.ToString()) Exit Property End Try End Get End Property Protected Overrides Sub Finalize() MyBase.Finalize() mdr.Close() mcnn.Close() MessageBox.Show("Connection closed successfully") End Sub End Class John W. Colby www.ColbyConsulting.com Contribute your unused CPU cycles to a good cause: http://folding.stanford.edu/ _______________________________________________ dba-VB mailing list dba-VB at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-vb http://www.databaseadvisors.com