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
Author: Robert G
Date: Thu, 19 Feb 2004 09:16
Date: Thu, 19 Feb 2004 09:16
19 lines
1827 bytes
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
Author: Marek Janaszewski USUNTO. z adre...
Date: Thu, 19 Feb 2004 10:59
Date: Thu, 19 Feb 2004 10:59
32 lines
2466 bytes
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
Author: Robert G
Date: Thu, 19 Feb 2004 12:04
Date: Thu, 19 Feb 2004 12:04
46 lines
2844 bytes
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
Author: Marek Janaszewski USUNTO. z adre...
Date: Fri, 20 Feb 2004 16:09
Date: Fri, 20 Feb 2004 16:09
64 lines
3488 bytes
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
Author: Robert G
Date: Sat, 21 Feb 2004 21:51
Date: Sat, 21 Feb 2004 21:51
17 lines
1917 bytes
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