Witam,
Mam pytanie dotyczące komponentu DGV. Zauważyłem, że istnieje możliwość załadowania kontrolki z dwóch powiązanych tabel, jednak mam problem z dataAdapter.Update. Korzystałem do tej pory z SqlCommandBuilder. Niestety przy większej ilości powiązanych tabel W DGV nie mogę za jego pomocą wygenerować polecenia niezbędnego do aktualizacji źródła danych. Czy istnieje jakiś prosty sposób, aby dokonać update'a w takim właśnie przypadku?
Napisz własne polecenia Update. W przypadku łączenia wielu tabel z sobą automatyczne rozwiązania (SqlCommandBuilder) nie zdają egzaminu.
Dziękuję za szybką odpowiedź. Chciałbym zapytać czy do swojego update'a mogę jakoś wykorzystać dataAdapter, czy należy to zrobić w sposób standardowy, tzn. przelecieć pętlą wszystkie wiersze w tabeli i zastosować zwykłe zapytanie, które zaktualizuje mi konkretne wiersze w tabelach.
Ewentualnie, jeżeli jest jakiś efektywny sposób - mógłbym prosić o kilka linijek przykładowego kodu?
Żadnych pętli nie potrzeba :)
SqlDataAdapter da = new SqlDataAdapter();
da.UpdateCommand = /*polecenie uaktualnienia */
Dużo informacji i co najważniejsze przykładowy kod Update znajdziesz tu:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx
Pozdrawiam.
Dziękuję.
Jednak nie wiem czy nie obędzie się bez pętli. Otóż przy zmianach wprowadzonych w jednym wierszu, update aktualizuje mi wszystkie wiersze w danej kolumnie jedną i tą samą wartością. Warunek z update nie zmienia się niestety dla poszczególnych wierszy.
SqlConnection conn = new SqlConnection(strCon);
conn.Open();
cmd = new SqlCommand(
"UPDATE Programy SET skrot = @skrot WHERE id = @id; "+
"UPDATE Linki SET link = @link, opis = @opis WHERE id_programu = @id", conn);
cmd.Parameters.Add("@skrot", SqlDbType.NVarChar, 0, "skrot");
cmd.Parameters.Add("@id", SqlDbType.Int, 0, "id");
cmd.Parameters.Add("@link", SqlDbType.NVarChar, 0, "link");
cmd.Parameters.Add("@opis", SqlDbType.NText, 0, "opis");
dataAdapter.UpdateCommand = cmd;
dataAdapter.Update(ds);
urucho sobie profilera i zobacz jakie zapytania leca do serwera
lub ustaw sie debugiem na dataAdapter.Update(ds); i zobacz jakie wartosci maja poszczegolne parametry, tylko nie jestem pewien czy w tym momencie juz sie podstawiaja
Dzięki, rzeczywiście chodziło o niedoprecyzowane zapytanie SQL :)