Γρήγορο (read-forward only) διάβασμα εγγραφών με το DataReader

επιθυμούμε ένα γρήγορο διάβασμα εγγραφών από έναν πίνακα μίας Βάσης Δεδομένων, τότε το DataReader είναι το πλέον κατάλληλο. Με αυτό, γίνεται προσπέλαση μίας-μίας εγγραφής (row by row) ξεκινώντας από την πρώτη.

To DataReader είναι πολύ αποδοτικό για αυτό το σκοπό ενώ επιπλέον διαθέτει και ειδικές μεθόδους για την ανάγνωση συγκεκριμένου τύπου πεδίου (Int16, Int32, String, DateTime κλπ). Στην εικόνα, βλέπουμε ένα Listbox που κάθε γραμμή αφορά και μία εγγραφή με τα πεδία ID, Επώνυμο, Όνομα. Έτος γέννησης, Ημερ/νία εγγραφής και Διέκοψε.

http://users.sch.gr/mouratx/VB-NET_Tips/DataManagement/Images/UsingDataReader.jpg

Τα δεδομένα φορτώνονται στο ListBox κατά το άνοιγμα της φόρμας.

Imports System.Data.OleDb

Dim strConn$ = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ΜΑΘΗΤΕΣ.MDB"
Dim conn As OleDbConnection
Dim cmdMathites As OleDbCommand
Dim Reader As OleDbDataReader

Private Sub Form1_Load(ByVal sender As System.Object, _

     ByVal e As System.EventArgs) _

Handles MyBase.Load

 

'Η γραμμή δεδομένων του ListBox.
Dim strListLine$ = ""

' σχετικά ADO.NET αντικείμενα πρόσβασης στη Βάση Δεδoμένων.
conn = New OleDbConnection(strConn)
conn.Open()

'Φτιάξε το Command από το οποίο θα προέλθουν οι εγγραφές.
cmdMathites = New OleDbCommand("Select * from ΜΑΘΗΤΕΣ", conn)

'Επιστρέφει τις εγγραφές του Command στο DataReader αντικείμενο.
Reader = cmdMathites.ExecuteReader

ListBox1.Items.Clear()

'Διάβασμα μίας-μίας εγγραφής και προσθήκη αυτής στο ListBox.
While Reader.Read()

'Τα πεδία κατά σειρά : ID (Int32), ΕΠΩΝΥΜΟ (String),
‘ΟΝΟΜΑ (String), 'ΕΤΟΣ_ΓΕΝΝΗΣΗΣ (Int16),
‘ΗΜΕΡΟΜ_ΕΓΓΡΑΦΗΣ (Datetime), ΔΙΕΚΟΨΕ (boolean).
strListLine = Reader.GetInt32(0) & " " & _
             
Reader.GetString(1) & " " & _
             
Reader.GetString(2) & " "

strListLine += Reader.GetInt16(3) & " " & _
              
Reader.GetDateTime(4).ToShortDateString & " " & _
              
Reader.GetBoolean(5)

ListBox1.Items.Add(strListLine)

End While

'Κλείσε το DataReader και τη σύνδεση.
'Προσοχή! Όσο το DataReader απασχολεί τη σύνδεση,
‘το αντικείμενο conn δεν μπορεί να προσφέρει τις υπηρεσίες του αλλού.
Reader.Close()
conn.Close()

End Sub


Η μέθοδος Read μεταφέρει τον cursor του πίνακα στην επόμενη εγγραφή. Η μέθοδος GetInt32(0) διαβάζει τα δεδομένα της 1ης στήλης (πεδίου ID, τύπος Long, δηλ. Int32) του πίνακα, της τρέχουσας εγγραφής. Κατ' αναλογία, υπάρχουν και οι άλλες μέθοδοι για το διάβασμα άλλων τύπων. Οι μέθοδοι παίρνουν ως παράμετρο την τακτική θέση (ordinal) της στήλης στη δομή του πίνακα.

Πάντως, θα μπορούσαμε να διαβάσουμε τα δεδομένα των στηλών του πίνακα κάνοντας χρήση των ονομάτων των πεδίων (columnname) :

strListLine = Reader.Item("ID") & " " & _
              Reader.Item("
ΕΠΩΝΥΜΟ") ... κλπ.

 

·         Χρήστος Μουρατίδης