Newsgroup: it.comp.lang.visual-basic
Titolo: da OleDbDataReader a variabile, consiglio. [VB.NET]

Ciao,
Utilizzo un db access a cui accedo di frequente, trovo molto scomodo
lavorare ogni volta direttamente sull'oggetto OleDbDataReader e quindi
vorrei fare in modo, ogni volta che è necessario prelevare dati dal
database, di rimandare il tutto ad una function che restituisca un array
di variabili con tipo definito dall'utente in cui viene racchiuso tutto il
contenuto dell'oggetto OleDbDataReader.
Per esempio:
La tabella "Anagrafica" del database contiene 3 colonne denominate "Nome",
"Cognome", "Indirizzo" e 5 righe di dati.
La function dovrebbe restituire un array di 5 variabili di tipo:
Nome, Cognome, Indirizzo As String
Quello che però vorrei fare sarebbe di rendere tutto dinamico. Cioè di
poter utilizzare la stessa function per qualsiasi tabella e quindi trovare
un modo di strutturare ogni volta il tipo a seconda della quantità e del
nome delle colonne contenute nell'oggetto OleDbDataReader prodotto dalla
query al database.
Riprendendo l'esempio precedente, la function dovrebbe:
1) fare la query al database e generare l'oggetto OleDbDataReader
2) strutturare un tipo che contiene un numero di variabili uguali al
numero di colonne in OleDbDataReader e associargli il relativo nome
3) creare un array che contenga un numero di variabili uguale al numero di
righe in OleDbDataReader
4) memorizzare OleDbDataReader nell'array
5) associare alla funzione il valore di tale array
E' possibile fare qualcosa del genere?
Altrimenti quale metodo alternativo potreste consigliarmi?
Grazie

Beh esistono datatable e dataset che riempire e riutilizzare dove ti serve.
Dim cm As New OleDbCommand("Select Nome, Cognome, Indirizzo FROM 
Anagrafica")
Dim cn As New OledbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=c:\mydb.mdb")
cm.Connection = cn
AnagraficaAdapter = New OleDbDataAdapter
AnagraficaAdapter.SelectCommand = cm
dataSet1 = New DataSet("Dati")
'se non ti serve l'update dei dati non hai bisogno di commandbuilder
Dim cm As New OleDbCommandBuilder(AnagraficaAdapter)
AnagraficaAdapter.Fill(dataSet1,"Anagrafica")
...
Quando ti serve estrarre i dati:
Dim rigaAnagrafica As DataRow
For Each rigaAnagrafica In dataSet1.Tables("Anagrafica").Rows
    'rigaAnagrafica è la rappreesentazione di un riga della tabella
    Console.WriteLine(rigaAnagrafica("Nome"))
    ..
Next
puoi anche decidere di continuare ad usare il datareader:
Dim listaAnagrafiche As New ArrayList
While myDataReader.Read()
     Dim obj(myDataReader.FieldCount - 1) As New Object
     myDataReader.GetValues(obj)
     listaAnagrafiche.Add(obj)
End While
myDataReader.Close()
poi dove ti serve definisci un oggetto di tipo array e leggi il contenuto di 
listaAnagrafiche
-- 
-----------------------------------------------------------------
Bastianello Luciano - MBS CP Development
Software Consultant - Apprentice Sorcerer
MSN: 
cte...@hotmail.com
 - ICQ: 209754422
http://community.visual-basic.it/LucianoB/
-----------------------------------------------------------------
"pollom" <NOs...@Nospam.NO> ha scritto nel messaggio 
news:pan.2005.11.13....@Nospam.NO...


Ti ringrazio molto per gli esempi.
Tu cosa mi consigli? Il Dataset immagino occupi un pò di memoria, ma si
può chiudere dopo averlo utilizzato? Qualche consiglio per ottimizzare le
risorse?
Grazie

è possibile caricare tutto un database in un dataset e lavorare direttamente su quest'ultimo?
Sarebbe molto pratico, ma credo che occuperebbe molta memoria, soprattutto
se il database fosse molto grande...