grazie 1000
A.
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.
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
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
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
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
� 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