exeman
Mistrz grilla
Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów
Skąd: znienacka
|
Wysłany: Sob 2:49, 27 Gru 2008 Temat postu: C# i TableAdaptery, które nie działają. |
|
|
Sprawa prosta, piszę program okienkowy korzystający z bazy danych.
Mam utworzone:
1. sqlConnection
2. dataSet
3. BindingSource i TableAdapter dla zapytania typu SELECT A JOIN B
4. dataGridView podpięty do powyższego BindingSource
Plan: Zmieniam wiersze w dataGridView i chcę zapisać dane do bazy. Podobno robi się to wywołując metodę Update na Adapterze.
Pierwsza sprawa, TableAdapter'owy Wizard nie potrafi wygenerować zapytań (i metod) UPDATE, INSERT dla zapytania zawierającego JOIN. Wyczytałem w necie, że przy złożonych zapytaniach Wizard wygeneruje tylko kod dla SELECT'a (te metody i inne bzdety).
Druga sprawa, napisałem sobie te zapytania ręcznie za pomocą DataSet Designera. W Adapterze pojawiła się nowa pozycja poniżej standardowego (Fill, GetData), a mianowicie: UpdateQuery(...)
Problem się pojawia przy próbie zapisania zmian z DataSet'u do bazy.
Robię to tak:
bajerZJoinemTableAdapter.Adapter.Update(this.mojDataSet.bajerZJoinem);
Wyskakuje wyjatek z komunikatem
Operacja Update wymaga prawidłowego elementu UpdateCommand podczas przekazywania kolekcji DataRow ze zmodyfikowanymi wierszami.
No ale przecież utworzyłem mu UpdateQuery.
Da się oczywiście wywołać ręcznie metodę bajerZJoinemTableAdapter.UpdateQuery, która jednak przyjmuje bezpośrednio parametry (kolumny), a ja chciałbym to zrobić na całym DataSet'cie, żeby wszystkie zmiany zapisały się automagicznie, jak to powinien Adapter właśnie robić.
Dla zapytań bez joina, Wizard generuje metody i zapytania dla update i insert, wtedy działa wszystko bez problemu.
Pytanie: Co robię źle? Jak podpiąć Adapter.Update do DataTable operującym na zapytaniu SELECT z joinem?
Z góry dzięki za pomoc, choć trochę wątpię w jej nadejście :p
Ostatnio zmieniony przez exeman dnia Sob 2:54, 27 Gru 2008, w całości zmieniany 3 razy
|
|