Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[vb.net] OleDbDataReader

10 views
Skip to first unread message

Andromeda

unread,
Nov 5, 2009, 10:03:59 AM11/5/09
to
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.


Nicola Ottomano

unread,
Nov 5, 2009, 10:27:09 AM11/5/09
to
Il 05/11/2009 16.03, Andromeda ha scritto:
> 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.....

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

Andromeda

unread,
Nov 5, 2009, 10:40:43 AM11/5/09
to

"Nicola Ottomano" <spam...@nicolaottomano.it> ha scritto nel messaggio
news:4af2eecd$0$1096$4faf...@reader3.news.tin.it...

> Il 05/11/2009 16.03, Andromeda ha scritto:
>> 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.....
>
> 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

ehmm ehmm un esempio per come usarlo dopo un oledbcommand di una select per
ciclare i dati? :P

grazie 1000
A.


VincePik

unread,
Nov 5, 2009, 11:31:14 AM11/5/09
to
> 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

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


Andromeda

unread,
Nov 5, 2009, 11:49:19 AM11/5/09
to

"VincePik" <TOGLI-ASTERISCHI-i*n*f*o...@monkeysoft.it> 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

VincePik

unread,
Nov 5, 2009, 12:14:12 PM11/5/09
to
> 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")
>

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

Wodka40[Google]

unread,
Nov 6, 2009, 5:29:30 AM11/6/09
to
On 5 Nov, 16:03, "Andromeda" <i...@qui.it> wrote:
> 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.

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

Nicola Ottomano

unread,
Nov 6, 2009, 6:14:35 AM11/6/09
to
Il 05/11/2009 17.31, VincePik ha scritto:
>> 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
>
> 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.

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

Melchiade Bedrosian Baol

unread,
Nov 11, 2009, 1:48:11 PM11/11/09
to
Andromeda ha scritto:

> 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...

� 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


0 new messages