Secondo me, la tua soluzione è buona. Ho visto un esempio simile in un libro in cui spiega come sviluppare oggetti commerciali.
In pratica ti costruisci un metodo in una classe o in un modulo, (come hai fatto)
La funzione che restituisce il DataReader, probabilmente l'avrei fatta aggiungento due parametri, StringaConnessione e StringaSql
L'esempio che ho visto è del tipo:
dim objReader as OleDbDataReader = miaClasse.MiaFunzione(StringaConnession, StringaSQl)
Se non restituisce Nothing itera o associalo alla griglia
chiudi objReader
A proposito, in letteratura si consiglia di non utilizzare il dataset almeno che non sia assolutamente necessario. Il DataReader è molto meno pesante.
Ti mando un esempio:
codice:
Protected s$ = ""
'-------------------------------------------------------------------------------------
'Restituisce un oggetto DataReader o nothing in caso di errore
'parametri: Stringa di connessione, stringa sql
'-------------------------------------------------------------------------------------
Public Function GetDataReader(ByVal stringaConnessione$, ByVal stringaSQL$) As OleDbDataReader
Dim Reader As OleDbDataReader
Try
Dim Connessione As New OleDbConnection(stringaConnessione)
Connessione.Open()
Dim Comando As New OleDbCommand(stringaSQL, Connessione)
Reader = Comando.ExecuteReader(CommandBehavior.CloseConnection)
Return Reader
Catch Errore As Exception
Return Nothing
End Try
End Function
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sql$ = "SELECT * FROM CAMPI"
Dim StringaConnessione$ = Application("connessione_access_prova").ToString
Dim Reader As OleDbDataReader = GetDataReader(StringaConnessione, sql)
If Reader Is Nothing Then Exit Sub
Dim Colonne% = Reader.FieldCount
s = "<table border='1' cellspacing='1' cellpadding='2'>"
s &= "<tr>"
Dim i, j As Integer
For j = 0 To Colonne - 1
s &= "<th>" & Reader.GetName(j) & "</th>"
Next
s &= "<th>" & "link" & "</th>"
s &= "</tr>"
While (Reader.Read)
s &= "<tr>"
For j = 0 To Colonne - 1
s &= "<td>" & Reader.Item(j).ToString & "</td>"
Next
s &= "<td>" & "link" & "</td>"
s &= "</tr>"
End While
Reader.Close()
Me.DataBind()
End Sub
dove l'istruzione:
codice:
Reader = Comando.ExecuteReader(CommandBehavior.CloseConnection)
forza la chiusura automatica della connessione non appena viene richiamato il metodo close dell'oggetto datareader
Ciao