Newsgroup: it.comp.lang.visual-basic
Titolo: [vb.net] OleDbDataReader

Salve a tutti,
nell'impresa di impararmi da autoditatta sto .net oggi mi sono scontrato con 
un problema riguardo l'OledDbDataReader... il problema � che � forward e 
ready only, mentre io avrei la necessit� di ciclarlo piu' volte... come devo 
fare? Non vorrei appoggiare tutto su un array.....
grazie 1000
A. 

 fare? Non vorrei appoggiare tutto su un array.....
Hai detto bene... essendo Foward-only e read-only, non hai la
possibilitï¿œ di muoverti tra i record se non in una sola direzione.
Se hai bisogno di qualcosa di piï¿œ versatile di un datareader ti
consiglio un datatable. Ovviamente le prestazioni non sono le stesse, ma
nel 99.9% dei casi non ï¿œ un problema.
Nicola

 Nicola
ehmm ehmm un esempio per come usarlo dopo un oledbcommand di una select per 
ciclare i dati? :P
grazie 1000
A. 

 Nicola
No Nicola, da te proprio non volevo sentirla questa! ;-)
I datatable e i dataset sono una porcata immensa (sempre IMHO)
Sono la classica pappa pronta per chi non vuole scrivere una riga di codice: 
si prende la tabella si trascina... il designer crea due cacchiavelle e 
fatto.
Poi al primo errore non si capisce dove andare a parare.
E' anche vero che Andromeda mi sembra di aver capito che sia alle prime 
armi, ma mi sentirei pi� di consigliare l'utilizzo di collection generiche o 
tipizzate che siano.
Di documentazione sul come usarle in giro ce n'� a bizzeffe e cos� almeno si 
capisce cosa si sta facendo. Agli inizi forse ci sar� da fare un piccolo 
sforzo in pi� ma i benefici sono di gran lunga maggiori!
Ciao, Vincenzo 

 ha scritto nel messaggio 
news:hcuukk$gmr$1...@tdi.cu.mi.it...

ehmm... ma io ho fatto tutto da codice :) Solamente che non trovo esempi su 
come collegare il commandtext di un oledbcommand ad un datatable e 
ciclarlo... in particolare io sono qui:
        Dim Cmd04 As New OleDbCommand
        Dim Cmd55 As New OleDbCommand
        Dim dr04 As OleDbDataReader
        Dim dt55 As DataTable
        Dim dtAdapter As OleDbDataAdapter
        Dim SQL04 As String = "SELECT * FROM tabella1"
        Dim SQL55 As String = "SELECT * tabella2"
        Cmd04.CommandText = SQL04
        Cmd04.Connection = dbConn
        Cmd55.CommandText = SQL55
        Cmd55.Connection = dbConn
        dtAdapter = New OleDbDataAdapter(SQL55, dbConn)
        dtAdapter.Fill(dt55)
  dr04 = Cmd04.ExecuteReader
  while dr04.read
  'qui vorrei posizionarmi a inizio dt magari con un for 1 to dt.count e 
dopo l'if fare un dt.movenext...
  if dr04("CAMPO1") == dt("CAMPO1") then  messagebox.show("OK")
  end while
grazie 1000


Mi sento buono ;-)
Prendi spunto da questo esempio che fa uso di Collection:
CategoriaPostDB.vb :
    Public Class CategoriaPostDB
        Private Shared ReadOnly log As ILog = 
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
        Public Shared Function GetList() As CategoriaPostList
            Dim objList As CategoriaPostList = Nothing
            Dim cn As OleDbConnection = New 
OleDbConnection(AppConfiguration.ConnectionString)
            Try
                Dim cmSel As OleDbCommand = New OleDbCommand("SELECT * FROM 
Categoria_Post", cn)
                cmSel.CommandType = CommandType.Text
                cn.Open()
                Dim dr As OleDbDataReader = cmSel.ExecuteReader()
                objList = New CategoriaPostList
                Do While dr.Read
                    objList.Add(FillDataRecord(dr))
                Loop
                CType(dr, IDisposable).Dispose()
                dr.Close()
                CType(dr, IDisposable).Dispose()
            Catch ex As Exception
                log.Error(ex)
            Finally
                cn.Close()
                cn.Dispose()
            End Try
            Return objList
        End Function
        Private Shared Function FillDataRecord(ByVal myDataRecord As 
IDataRecord) As CategoriaPost
            Dim myCategoriaPost As CategoriaPost = New CategoriaPost
            myCategoriaPost.IDCategoria = 
myDataRecord.GetInt32(myDataRecord.GetOrdinal("ID_CategoriaPost"))
            myCategoriaPost.Descrizione = 
myDataRecord.GetString(myDataRecord.GetOrdinal("Descrizione"))
            Return myCategoriaPost
        End Function
CategoriaPost.vb :
    Public Class CategoriaPost
        Private _IDCategoria As Integer
        Private _Descrizione As String
        Public Property IDCategoria() As Integer
            Get
                Return _IDCategoria
            End Get
            Set(ByVal value As Integer)
                _IDCategoria = value
            End Set
        End Property
        Public Property Descrizione() As String
            Get
                Return _Descrizione
            End Get
            Set(ByVal value As String)
                _Descrizione = value
            End Set
        End Property
    End Class
CategoriaPostList.vb :
Imports System
Imports System.Collections
    Public Class CategoriaPostList
        Inherits List(Of CategoriaPost)
    End Class
Una volta che la collection � piena di elementi puoi fare tutto quello che 
vuoi... naturalmente ti devi costruire dei metodi per la ricerca ad esempio 
per id o per descrizione.
Altrimenti puoi usare le HashTable che hanno gi� un sistema basato sulle 
chiavi.
Anche se � un articolo basato sulla realizzazione di una web application, 
puoi dare un'occhiata al codice per prendere spunti:
http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=416
oppure:
http://code.msdn.microsoft.com/ObjectDataSourceNort
http://www.asp.net/learn/data-videos/
http://www.asp.net/learn/data-access/
anche se per 
ASP.NET
, rendono bene l'idea
Ciao, Vincenzo

 A.
Ti consiglio di leggere
http://groups.google.it/group/it.comp.lang.visual-basic/browse_frm/thread/8d45b314a5866ceb/8795020f1f04d1fe?hl=it&lnk=gst&q=datareader+load#8795020f1f04d1fe

 Poi al primo errore non si capisce dove andare a parare.
Beh, oddio, volendo un bel DataTable scritto a mano (come mi capita
spesso di gestirne) con tutti i crismi non ï¿œ male.
Dipende dall'uso che se ne deve fare.
Il mio motore DTU qui in ufficio usa DataReader e DBProviderFactory a
go-go, ma deve anche processare alcune milioni di operazioni in
pochissimo tempo, magari su DB differenti... magari sul gestionalino,
tipo il Gestione Ottica, uso un bel DataTable (rigorosamente gestito da
codice!), tanto per tirar fuori l'anagrafica clienti un DataReader ï¿œ piï¿œ
d'impaccio che d'aiuto.
Nicola

 ciclarlo...
� nel prossimo capitolo del manuale.
si chiama oledbdataadapter.
(con il fratellino sqldataadapter)
-- 
Salutoni
Sergio
C'� il giorno in cui nasci e quello in cui scegli di vivere
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it