[ Mikelly @ 28.09.2007. 19:31 ] @
| Prije nekoliko dana makoh VS2003 i stavih VS2005 i super mi je.
Sad pravim tipizirane datasetove i klasa bindingsource je odlicna. Ali, imam problem sa update-om. Posto mi je dataset tipiziran, imam tableadapter-e a ne dataadaptere.
E sad konkretan problem:
Ubacujem novi zapis u dataset (pisem napamet moze bit gresaka):
NDRT.CK_Baza_DataSet.DataRow dr = new NDRT.CK_Baza_DataSet.NewRow();
this.CK_Baza_DataSet.AddRow(dr);
this.dataBindingSource.Position = this.dataBindingSource.Find("ID",dr["ID"].ToString());
Dugme za update TableAdaptera ima sledeci kod:
this.Validate();
this.dataBindingSource.EndEdit();
this.dataTableAdapter.Update(CK_Baza_DataSet.Data);
I konacno, greska:
Update radi ok dok ne ubacim novi red u dataset. Kada ubacim novi red u dataset i prvi put uradim update, sve je ok. E sad, promijenim li jos koje polje na istom zapisu, a da ne promijenim position svojstvo prijavice gresku (u jednom od dva slucaja):
DBConcurrencyException. kao Update affected 0 rows a ocekivao je da affect 1 row.
Sto mi je cinjet? Je li problem u ubacivanju novoga zapsa, ili sta?
Pozdrav.
|
[ mmix @ 28.09.2007. 19:54 ] @
Malo mi je cudan ovaj tvoj kod, narocito dodavanje reda u dataset umesto u tabelu :)
Ali generalno kontam sta radis, umesto da instanciras nove DataRow, kreiraj ga koristeci AddXXXXRow() metod koji je generisan na nivou tabele, on ce automatskei kreirati row za tebe i dodati ga u tabelu.
[ Mikelly @ 29.09.2007. 13:54 ] @
Prvo mala ispravka, tice se koda koji dodaje novi zapis u dataset.
Dakle nije:
NDRT.CK_Baza_DataSet.DataRow dr = new NDRT.CK_Baza_DataSet.NewRow();
this.CK_Baza_DataSet.AddRow(dr);
vec:
NDRT.CK_Baza_DataSet.Data.DataRow dr = new NDRT.CK_Baza_DataSet.Data.NewRow();
this.CK_Baza_DataSet.Data.AddRow(dr);
jer se tabela u okviru dataseta naziva "Data".
Dakle, napravim novi row po schemi dataseta, pa ga posle dodam u tabelu data. Sad vise nije cudno, jelda? :)
To medjutim nije problem. Sad sam ga potpuno izolovao. Naime, forma ima nekoliko bindovanih textboxova i jednu onu tab kontrolu sa nekoliko tabova koji su puni raznih checkboxova i textboxova.
!!!
Kada dodam novi red na gore navedeni nacin i snimim podatke u bez mijenjanja podataka u tab kontroli, pa onda promijenim nesto na tab kontroli i ponovo pokusam snimit podatke u bazu prijavi concurrency error (affected 0 rows, expected 1).
A kada promijenim i nesto na tab kontroli prije prvog snimanja u bazu, greska nema!!!!
!!!
Fatao sam i greske prilikom update-a, dataset.HasErrors je true, ali nijedan od njegovih rows nema greska. Izludje me.
Koliko ja vidim tableadapter nema nikakve dogadjaje, niti mu mogu vidjet kako izgledaju command objekti za update nazad u bazu, pa prosto ne znam sto da radim.
[ Mikelly @ 29.09.2007. 15:55 ] @
Evo izgleda rjesenje problema, ako je to bio problem uopste.
Dakle, kada sam default value svih check boxova u dataset schemi umjesto <DBNull> postavio na false (true), vise ne prijevljuje gresku. Kada bar jedan od tih check boxova ostavim po defaultu na <DBNull> opet pocne da prijavljuje gresku. Uf.
Glupost, bug, sto li je...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.