Pytanie : SQLCommandBuilder - GetUpdateCommand, GetInsertCommand i GetDeleteCommand Pytanie

Gdy I wysyłać w mój poprzedzający pytanie I mieć VB 2005 app che wystawiać 3 pole od SQL-Serwer stół w DataGridView.  2 kolumna być tam  ale widoczny, wliczając the początkowy klucz.  Podczas Gdy the rozumieć kod "pracować" tak daleko jak the zmiana w the DataGridView kontrola the baza danych gdy I klikać the Save guzik, I rozumieć dlaczego.  I patrzeć the CommandText dla the UpdateCommand przedmiot wytwarzać the GetUpdateCommand metoda i podczas gdy ono być wytwarzać, I móc jak ono dostawać the parametr.  I także móc jak ono wkładać lub kasować rejestr ale ono wydawać się to.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
    

'Oznajmiać w "Globals" Moduł:
Jawny gdaMyDataAdapter Jako Nowy SqlDataAdapter
Jawny gdtMyDataTable Jako Nowy DataTable

'Zaludniać the Siatka…
Jawny Okręt podwodny PopulateGrid ()

Ciemnawy sSQL Sznurek
Ciemnawy cn Jako Nowy SqlConnection (MyConnectionString)
cn. Otwierać ()

sSQL = "WYBRANY MyKey, col1, col2, col3, OtherKey OD MyTable DOKĄD OtherKey = 1234"

Ciemnawy cmdSelect Jako Nowy SqlCommand (sSQL, cn)
gdaMyDataAdapter.SelectCommand = cmdSelect

'Pewny I potrzebować te tutaj lub jeżeli kolidować z the te w "oprócz"
Ciemnawy MyCommandBuilder Jako Nowy SqlCommandBuilder (gdaMyDataAdapter)
gdaMyDataAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand (Prawdziwy)

gdaMyDataAdapter.Fill (gdtMyDataTable)
MyDataGridView.DataSource = gdtMyDataTable

Końcówka Okręt podwodny

'Oprócz.  Dzwonić guzik stuknięcie wydarzenie procedura….

Jawny Okręt podwodny GridSave ()

Ciemnawy MyCommandBuilder Jako Nowy SqlCommandBuilder (gdaMyDataAdapter)

MyCommandBuilder.GetUpdateCommand ()

'Pod dwa wezwanie wydawać się DWA.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

'Jako test, I być sprawnie the CommandText dla the DataAdapter's UpdateCommand przedmiot jak to:
gdaMyDataAdapter.UpdateCommand.CommandText = ""

iRows = gdaMyDataAdapter.Update (gdtMyDataTable)
gdtMyDataTable.AcceptChanges ()

Końcówka Sub


I polubić dlaczego the GetInsertCommand i GetDeleteCommand ustawiać the DataAdapter nakazowy przedmiot ale the GetUpdate wydawać się ono wszystko (Wszywka/Deleatur/Aktualizacja) gdy I zrobić wiele zmiana przez the siatka z pojedynczy wezwanie (da. Aktualizacja (dt)).

Where I iść być że I mieć kłopot the Aktualizacja Iść iść NIEOBOWIĄZUJĄCY dla "OtherKey".  MyKey być w the zasadniczy stół gdy tożsamość kolumna i ono być niewidzialny w the siatka.  I mieć the użytkownik rząd bezpośrednio the siatka wartość w col1, col2 i col3.  I mieć "OtherKey" przechować w TextBox na Form1.  I polubić "OtherKey" niewidzialny w the siatka i the wartość od zmienna który ustawiać od the TextBox.  Nieważne od tego jak I pociągać the AKTUALIZACJA wydawać się I wydawać się sprawnie mój stół być NULL.

If I być niejasny lub ty potrzebować wcale więcej info, zadawalać pozwalać know.

Regards,
Eric

Odpowiedź : SQLCommandBuilder - GetUpdateCommand, GetInsertCommand i GetDeleteCommand Pytanie

Najpierw wszystko, ten linia potrzebować:

gdaMyDataAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand (Prawdziwy)

… który być ponieważ the the SqlCommandBuilder brać the aktualny SelectCommand od the DataAdapter który przechodzić ono the wymagany InsertCommand, DeleteCommand, i UpdateCommand.  Ponieważ the DataAdapter przechodzić odniesienie, the zmiana zrobić wśrodku the CommandBuilder być teraz widoczny the odpoczynek the program.

Likewise the następujący potrzebować:

MyCommandBuilder.GetUpdateCommand ()

'Pod dwa wezwanie wydawać się DWA.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

… dla the powód powód.  Ty przechodzić the DataAdpater the konstruktor the CommandBuilder, i przechodzić the wymagany rozkaz automagically ustawiać wśrodku the CommandBuilder.

Inne rozwiązania  
 
programming4us programming4us