[ DjordjeRd @ 11.12.2007. 11:33 ] @
Prilično bizaran problem: Kad učitam tabelu u DataSet potrebno mi je da dođem do podatka koji je primarni ključ a koji su dodatni indeksi (sa pripadajućim kolonama) kreirani na datoj tabeli na serveru. U DataSetu tih podataka nema, a sve zaobilazne varijante koje mi padaju na pamet su očigledno nezgrapne. Ima li neko iskustva kako pročitati postojeće ključeve i indekse, naravno, iz VB koda?
[ toxi_programer @ 11.12.2007. 13:42 ] @
DataTable.PrimaryKey je za primarni ključ.
[ DjordjeRd @ 11.12.2007. 14:00 ] @
He, he, ali taj property je prazan kad izvršiš:
Code:

adapter.fill(dataset, connection)

Moraš da ga napuniš sa columns kolekcijom koja, btw, mora biti unique.
Demantujte me, pliz!
[ mmix @ 12.12.2007. 07:40 ] @
Pri ucitavanju sheme tabele u untyped dataset ne ucitava se nista sem sheme podataka koji se ucitavaju, znaci nema PK, nema FK, nema constraints, mislim da cak ni default value ne uzima
Jedini nacin da ovo zaobidjes je da koristis typed dataset i da sam generises kljuceve, a ako to nije moguce, onda moras da koristis nezgrapno resenje i da odradis par dodtnih querija da radis table discovery.
[ DjordjeRd @ 12.12.2007. 11:56 ] @
Ovaj diskaveri mi zvuči obećavajuće. Bilo kako bilo, ako provalim imaćete povratnu informaciju. Ne mogu da verujem da negde u kodu moram da imam strukturu koja podražava formaciju indeksa na postojećim tabelama na serveru. To što je PrimaryKey property prazan kad se tabela učita u dataset, je najblaže rečeno, skandal.
[ dusty @ 12.12.2007. 13:22 ] @
Citat:
DjordjeRd: To što je PrimaryKey property prazan kad se tabela učita u dataset, je najblaže rečeno, skandal.


Nije, jer da bi dobio natrag tu informaciju mora da se izvrsi dodatni upit, sto opterecuje, a 'vecina' taj podatak retko kada koristi pa su 'optimizovali' metodu Fill. Zato imas metodu FillSchema koja ti vraca koliko-toliko mapiranu shemu tabele, koju pozoves pre Fill metode.
[ mmix @ 12.12.2007. 18:45 ] @
Pored FillSchema koju ti je dusty dao, imas i flag na adapteru koji ce ti sam to odraditi:

Code:

adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
adapter.Fill(...);


sto se u principu svodi na to da Fill pozove FillSchema ako shema nedostaje ;). Medjutim oba ova resenja se svode na minimalno dodavanja Primary kljuca, ostale single i multicolumn unique constraints se ne dodaju aftamacki. Tako da ako ces na ucitanoj tabeli dodavati nove redove moras da obratis paznju na te unique constraints.
[ bjevta @ 13.12.2007. 16:32 ] @
Ako treba da se čita meta-data (tabele, kolone, indeksi, itd), mora se koristit SMO. Međutim, SMO je namenjen samo za ove stvari (baratanje samom bazom, ne i podacima), a to spada u sasvim drugi tip aplikacije.
[ mmix @ 14.12.2007. 08:55 ] @
SMO je malo overkill za to, a i radi samo na SQL2005, mada slican posao na SQL2000 obavlja SQLDMO. Malo ljudi i zna da radi sa ovim objektima a i nema previse potrebe za time kad se sve to moze resiti sa par (ne)dokumentovanih skripti ;)

ado.net 2 data provajderi imaju opciju za utvrdjivanje sheme baze, preko GetSchema metoda na Connection objektu. medjutim problem je sto nista od toga nije automatizovano i moras da imas kod koji ce da analizira i kreira repliku sheme u dataset-u sto se slabo isplati.