Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

OleDbDataReader klasa

Kada se izvrava jednostavan SQL upit i elimo samo da itamo podatke iz baze, najbre je korienje OleDbDataReader-a. On se kreira metodom komande ExecuteReader. Pomou itaa moemo itati podatke samo u jednom smeru od prvog ka poslednjem redu tabele. Dok je ita u upotrebi, ni jedna operacija na konekciji ne moe biti izvrena osim zatvaranja konekcije. Zbog toga ita treba zatvoriti nakon zavretka rada sa njim. Kreiranje itaa: OleDbDataReader dr=komanda.ExecuteReader( ); Objekat je kreiran i postavljen ispred prvog zapisa tabele. Podaci jo nisu iitani, ali moemo dobiti podatke o strukturi tabele. int brkol = dr.FieldCount; //svojstvo predstavlja broj kolona koje vraa SQL upit string s = dr.GetName(0); //metoda vraa naziv kolone (string) iji je indeks naveden string tip=dr.GetFieldType(0).ToString(); //metoda vraa tip kolone iji je indeks naveden. bool b = dr.IsClosed; //logiko svojstvo, true ako je ita zatvoren Pr. 1. Na 4 labele ispisati nazive kolona pomou itaa. If(dr.IsClosed) { citac=komanda.ExecuteReader( ); label1.Text= dr.GetName(0); label2.Text= dr.GetName(1); label3.Text= dr.GetName(2); label4.Text= dr.GetName(3); } Pr. 1. Na zaglavlju dataGridView-a ispisati nazive kolona pomou itaa. int columnCount = dr.FieldCount; for (int i = 0; i < columnCount; i++) {
dataGridView.Columns.Add(dr.GetName(i).ToString(), dr.GetName(i).ToString());

} DataGridView poseduje kolekciju kolona i redova koje dodajemo po potrebi metodom Add. Ona ima dva argumenta naziv kolone i natpis kolone. Da bi podatke itali pomeramo ita na sledei red tabele metodom Read( ). Ona vraa logiku vrednost False ukoliko vie nema redova za itanje. Pomeranje se vri samo u jednom smeru, tako da na poetku novog itanja ponovo otvaramo ita. if (!dr.IsClosed) dr.Close(); // ako ita nije zatvoren, zatvaramo ga dr = komanda.ExecuteReader(); // i ponovo otvaramo da bi se postavio na poetak while (dr.Read()) // dok god metoda vraa True pomeramo ita na novi red { }

itanje se vri pomou sledeih metoda: GetValues(object[] niz) vraa ceo red i vrednosti smeta u niz objekata object[] niz = new object[brkol]; dr.GetValues(niz); dataGridView1.Rows.Add(niz); //dodajemo novi red u grid i upisujemo vrednost niza object x =GetValue(int index) vraa vrednost navedene kolone i dodeljuje ga objektu x. textBox3.Text = dr.GetValue(2).ToString(); Dobijene vrednosti dalje moramo da konvertujemo u eljeni tip da bismo ih koristili u aplikaciji. Ako unapred znamo tip podatka u koloni, efikasnije je da koristimo neku od GetType metoda: GetInt32, GetString, GetBoolean, GetChar textBox1.Text = dr.GetString(0); Direktna konverzija prilikom itanja podatka ne prolazi ukoliko je polje prazno (ima NULL vrednost), jer NULL ne moe da se konvertuje u navedeni tip. Da li je polje prazno moemo ispitati logikom metodom IsDbNull: String tip= dr.GetFieldType(0).ToString(); If((tip=="int32")&&(!dr. IsDbNull(0)) Int x=dr.GetInt32(0); Ceo red moemo dobiti indeksiranjem DataReader-a: String[] vrednosti= new String[brkol]; for (int j = 0; j < brkol; j++) vrednosti[j] = dr[j].ToString(); //indeksiranjem itaa pristupamo navedenoj koloni dataGridView1.Rows.Add(vrednosti); //nakon izlaska iz ciklusa niz stringova dodajemo gridu. Pr. 3. Klikom na dugme1 u textBox1 upisati naziv sledee drave
private void button1_Click(object sender, EventArgs e) { if (dr.IsClosed) dr = komanda.ExecuteReader(); if (dr.Read()) textBox1.Text = dr.GetString(0); }

Pr. 3. Klikom na dugme2 u DatagridView upiasti sadraj tabele


private void button2_Click(object sender, EventArgs e) { if (!dr.IsClosed) dr.Close(); dr = komanda.ExecuteReader(); int brkol = dr.FieldCount; object[] niz = new object[brkol]; for (int j = 0; j < brkol; j++) dataGridView1.Columns.Add(dr.GetName(j).ToString(),dr.GetName(j)); while (dr.Read()) { dr.GetValues(niz); dataGridView1.Rows.Add(niz); } }

You might also like