Problem koji mi se čini da nastaje na ovaj način, jeste sledeći. Da bi
deklarisao niz, ili matricu, moraš pri instanciranju da navedeš koliko će
imati elemenata. A to ne možeš da saznaš iz datareader-a, osim ako ne bi
jednom prošao kroz ceo while samo da bi prebrojao koliko imaš redova, pa
tek onda još jedan while da prebaciš u matricu te podatke. Zato probaj da
umesto OleDbDataReader-a koristiš adapter.
Code:
Dim con As New
OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="c:\Baza.mdb") ' konekcija na bazu
Dim ds As New Dataset()
Dim adapter As New OleDb.OleDbDataAdapter()
Dim command As New OleDb.OleDbCommand()
command.Connection = con
command.CommandText = " select Ime,Prezime,Telefon from Tabela1 "
adapter.SelectCommand = command
adapter.Fill(ds)
Na ovaj način, dobio si podatke iz tablee u dataset, i sada možeš da vidiš
koliko je redova vratio upit na sledeći način:
ds.Tables[0].Rows.Count
A čitaš iz dataseta :
ds.Tables[0].Rows[indexReda].ItemArray[indexPodatka]
indexPodatka: 0-ime,1-prezime,2-telefon, ovi indexi zavisi od broja i
redosleda polja koje si naveo u select naredbi.
primer:
ds.Tables[0].Rows[0].ItemArray[2].ToString() - vraća ti broj telefona
prvog reda u tabeli.
Ali generalno ima tu i drugi problem sa takvom matricom...jer to i nije
matrica nego niz čiji svaki element ima tri stringa.
Ja bi to onda ovako uradio:
Code:
class Osoba{
public string Ime;
public string Prezime;
public string Telefon;
}
//a kasnije u kodu definišeš niz
Osoba[] nizOsoba = new Osoba[ds.Tables[0].Rows.Count];
i na kraju prebacivanje iz dataseta u niz (nakon što je povučeno iz baze):
for(int i =0;i<ds.Tables[0].Rows.Count;i++)
{
nizOsoba[i].Ime = ds.Tables[0].Rows[i].ItemArray[0].ToString();
nizOsoba[i].Prezime = ds.Tables[0].Rows[i].ItemArray[1].ToString();
nizOsoba[i].Telefon = ds.Tables[0].Rows[i].ItemArray[2].ToString();
}
Ovo je u C#, ne poznajem baš kako treba sintaksu VB-a
--
Using Opera's revolutionary email client:
http://www.opera.com/mail/