🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages Started by Robert G Thu, 19 Feb 2004 09:16
DataSet i DataAdapter
#514
Author: Robert G
Date: Thu, 19 Feb 2004 09:16
19 lines
1827 bytes
Witam
Wie ktos moze na jakiej postrawie DataAdapter decuduje o wywolaniu komendu
Insert lub Update ?
Zrobilem sobie prosta formatek ktora ma jedno pole tekstowe. Pole jest
bindowane do obeiktu dataset ktory zawiera prosta tabele
Typy(TypID(autonumer),Typ(string)) Na pole tekstowe zalozony jest unikalny
indeks.
Wpisuje do pola tekstoweog nazwe typu np. Typ1. Jezeli w bazie nie ma
takiego typu to sie dodaje. Jezeli typ jest to wyskakuje wyjatek ze nie moze
dodac. Po wylapaniu wyjatku, zmieniam pole na wartosc nie istniejaca w
bazie. Wywaoluje DatatAdapter.Update(myDataSet,"Typy"), i dostaje wyjatek :
"... element CommandUpdate dotyczy zerowej liczby rekordow. W zdarzeniu
RowUpdated EventArg ma stan Updat. W myDataSet mam rekord z wartoscia nie
istniejaca w bazie ?! Ktos wie jak zresetowac po pierwszej nieudanej probie
dataadapter lub cos co decuduje ze dataadapter wywoluje komende Update a nie
Insert ?!

Z gory thx za pmoc
Robert G
Re: DataSet i DataAdapter
#515
Author: Marek Janaszewski USUNTO. z adre...
Date: Thu, 19 Feb 2004 10:59
32 lines
2466 bytes
W artykule news:c11v15$ir0$1...@nemesis.news.tpi.pl,
niejaki(a): Robert G z adresu <zof...@interia.pl> napisał(a):

> Witam
> Wie ktos moze na jakiej postrawie DataAdapter decuduje o wywolaniu
> komendu Insert lub Update ?
> Zrobilem sobie prosta formatek ktora ma jedno pole tekstowe. Pole jest
> bindowane do obeiktu dataset ktory zawiera prosta tabele
> Typy(TypID(autonumer),Typ(string)) Na pole tekstowe zalozony jest
> unikalny indeks.
> Wpisuje do pola tekstoweog nazwe typu np. Typ1. Jezeli w bazie nie ma
> takiego typu to sie dodaje. Jezeli typ jest to wyskakuje wyjatek ze
> nie moze dodac. Po wylapaniu wyjatku, zmieniam pole na wartosc nie
> istniejaca w bazie. Wywaoluje DatatAdapter.Update(myDataSet,"Typy"),
> i dostaje wyjatek : "... element CommandUpdate dotyczy zerowej liczby
> rekordow. W zdarzeniu RowUpdated EventArg ma stan Updat. W myDataSet
> mam rekord z wartoscia nie istniejaca w bazie ?! Ktos wie jak
> zresetowac po pierwszej nieudanej probie dataadapter lub cos co
> decuduje ze dataadapter wywoluje komende Update a nie Insert ?!
[...]

Witam!

DataAdaper nie przechowuje danych tylko jest interfejsem komunikacji z bazą
danych. Ja spodziewał bym się, że DataSet zawiera informacje o tym, że
rekord został dodany, poprawiony albo usunięty i w momencie utrwalania zmian
prosi DataAdapter o dokonanie zmian.

-- 
Pozdrawiam,
Marek Janaszewski
[ j_m...@gazeta.pl ]
Re: DataSet i DataAdapter
#516
Author: Robert G
Date: Thu, 19 Feb 2004 12:04
46 lines
2844 bytes
Witam
Przeciez ja nie napisalem ze dataadapter przechowuje dane ?! Wydaje mi sie
ze dosc jasno wyjasnilem o co mi chodzi. Jesli nie to prosze o inforamcje co
jest nie jasne.

Pozdrawiam
Robert G

U�ytkownik "Marek Janaszewski (USUN_TO. z adresu!)"
<USUN_TO...@gazeta.pl> napisa� w wiadomo�ci
news:c1288a$d6c$1@news.atman.pl...
> W artykule news:c11v15$ir0$1...@nemesis.news.tpi.pl,
> niejaki(a): Robert G z adresu <zof...@interia.pl> napisa�(a):
>
> > Witam
> > Wie ktos moze na jakiej postrawie DataAdapter decuduje o wywolaniu
> > komendu Insert lub Update ?
> > Zrobilem sobie prosta formatek ktora ma jedno pole tekstowe. Pole jest
> > bindowane do obeiktu dataset ktory zawiera prosta tabele
> > Typy(TypID(autonumer),Typ(string)) Na pole tekstowe zalozony jest
> > unikalny indeks.
> > Wpisuje do pola tekstoweog nazwe typu np. Typ1. Jezeli w bazie nie ma
> > takiego typu to sie dodaje. Jezeli typ jest to wyskakuje wyjatek ze
> > nie moze dodac. Po wylapaniu wyjatku, zmieniam pole na wartosc nie
> > istniejaca w bazie. Wywaoluje DatatAdapter.Update(myDataSet,"Typy"),
> > i dostaje wyjatek : "... element CommandUpdate dotyczy zerowej liczby
> > rekordow. W zdarzeniu RowUpdated EventArg ma stan Updat. W myDataSet
> > mam rekord z wartoscia nie istniejaca w bazie ?! Ktos wie jak
> > zresetowac po pierwszej nieudanej probie dataadapter lub cos co
> > decuduje ze dataadapter wywoluje komende Update a nie Insert ?!
> [...]
>
> Witam!
>
> DataAdaper nie przechowuje danych tylko jest interfejsem komunikacji z
baz�
> danych. Ja spodziewa� bym si�, �e DataSet zawiera informacje o tym, �e
> rekord zosta� dodany, poprawiony albo usuni�ty i w momencie utrwalania
zmian
> prosi DataAdapter o dokonanie zmian.
>
> -- 
> Pozdrawiam,
> Marek Janaszewski
> [ j_m...@gazeta.pl ]
>
Re: DataSet i DataAdapter
#517
Author: Marek Janaszewski USUNTO. z adre...
Date: Fri, 20 Feb 2004 16:09
64 lines
3488 bytes
W artykule news:c128pt$4fo$1...@nemesis.news.tpi.pl,
niejaki(a): Robert G z adresu <zof...@interia.pl> napisał(a):

> Witam
> Przeciez ja nie napisalem ze dataadapter przechowuje dane ?! Wydaje
> mi sie ze dosc jasno wyjasnilem o co mi chodzi. Jesli nie to prosze o
> inforamcje co jest nie jasne.
[...]

Witam!

OK, już widzę o co Ci chodzi. To znaczy nie wiem z czego to wynika.
Niepotrzebne się wychyliłem bo zmusiło mnie to do przyjrzenia się bliżej
ADO.NET a działam na C# Builder Personal więc do pomocy nie ma kreatorów
ułatwiających pracę.

Ale jak się z tym uporałem do udało mi się podłączyć DataGrida do
DataSet/DataAdapter aby przetestować wszystkie operacje. Sprawdzałem próbę
podania powtarzającego się klucza głównego i mogłem go poprawić. Status
rekordu można sprawdzić ale nie można go zmieniać. Jak się chcesz sam
przekonać to podaje namiary metody/właściwości w dokumentacji .NET SDK:

Przykład:

DataRow currRow =
dstKontrah.Tables["Kontrah"].Rows[grdKontrah.CurrentRowIndex];
... currRow.RowState ...;

Po prowadzeniu powtarzającego klucza mogłem go poprawić i nadal wywołać:
daKontrah.Update(dstKontrah, tblNameKontrah);

Być może problem polega, że nie zakończyłeś zmian dokonywany na DataSet.
Jest coś takiego jak:
currRow.EndEdit();

Poza tym jest:
currRow.AcceptChanges();

Po wywołaniu tej metody, DataSet ustawia sobie stan rekordu na
niezmodyfikowany i nie wysyła go do DataAdapter.

Albo jest:
currRow.RejectChanges();

I mamy poprzednią wersje rekordu.

Ja akurat podłączałem się do bazy Accessowe więc korzystałem z przestrzeni
nazw OleDb. Z dokumentacji wynika, że DataAdapterowi trzeba przygotować
zapytania na wszystkie okazje i przekazać parametry do tych zapytań. Co by
się zgadzało z tym co mówili goście w MSDN .NET Show. Należy zwrócić uwagę
jaką wartość z DataSet przekazuje się przez parametry. Starą czy nową. Jest
ustawienie do tego celu. Parametr następnie wiąże z polami DataSet,
właściwość SourceColumn.

Proszę powiedzieć czy moje badania pomogły w czymś. Myślę, że jest kilka
namiarów, które można pogłębić w dokumentacji.

P.S. Proszę pisać pod postem to znaczy pod poprzednią wiadomością i ciąć co
niepotrzebne. Minimum sygnaturki.

-- 
Pozdrawiam,
Marek Janaszewski
[ j_m...@gazeta.pl ]
Re: DataSet i DataAdapter
#518
Author: Robert G
Date: Sat, 21 Feb 2004 21:51
17 lines
1917 bytes
Wszystko sie zgadza, co napisales. Problem siedzial w tym ze przekazywalem
do metody ktora wywolywala Dataadapter.Update dataset ktory byl podbindowany
do formularza, i nie wiedziec czemu dataadapter wywolal Inserta na rekordzie
ktory mu przeslalem a ktory byl juz w bazie to pomimo tego ze wylecial
exception to rekord zmienial stan a Added na Unchanged. I ten stan jakims
cudem byl kopiowany do tego datasetu w formularzu chcociaz do metody
przekazywalem go bez "ref" czyli jakrozumiem nie przez referencje.
Jak zrobilem kopie zmienionych rekordow metoda GetChanges i ja przeslalem,
to jak sie wywalilo, to zmiany RecordState odwzorowane byly w tej kopi ktora
po zakonczeniu sie kasowala, a ja moglem zmienic pole formularza, ktore ma
byc unikatowe i ponownie wywolac Metoda dopisujaca poniewaz rekord pozostal
wstanie Added.

W kazdym razie thx za zainteresowanie.

Pozdrawiam
Robert G
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads