Frage : SQLCommandBuilder - GetUpdateCommand, GetInsertCommand und GetDeleteCommand Fragen

Da ich in meiner vorhergehenden Frage mich bekannt gab, eine VB APP 2005 haben, die 3 Felder von einer SQL-Bediener Tabelle in einem DataGridView anzeigt.  2 Spalten sind, einschließlich den Primärschlüssel dort aber nicht sichtbar.  Während der below Code bis zu der Festlegung der Veränderungen der DataGridView Steuerung zu der Datenbank hin „arbeitet“, wenn ich den Sicherungsknopf anklicke, verstehe ich nicht warum.  Ich betrachtete das CommandText nach dem UpdateCommand Gegenstand, der durch die GetUpdateCommand Methode erzeugt wurde und während sie lesbar war, könnte ich nicht erklären, wie sie die Parameter bevölkert erhielt.  Ich könnte auch nicht erklären, wie sie Aufzeichnungen einsetzen oder löschen würde, aber es to.

1 schien:
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:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
    

'Erklärt in einem „Globals“ Modul:
Allgemeines gdaMyDataAdapter als neues SqlDataAdapter
Allgemeines gdtMyDataTable als neues DataTable

'Das Rasterfeld bevölkern…
Allgemeines VorPopulateGrid ()

Schwaches sSQL als Schnur
Schwache KN als neues SqlConnection (MyConnectionString)
KN. Öffnen ()

sSQL = „AUSERWÄHLTES MyKey, col1, col2, col3, OtherKey VON MyTable, WO OtherKey = 1234“

Schwaches cmdSelect als neues SqlCommand (sSQL, KN)
gdaMyDataAdapter.SelectCommand = cmdSelect

'Nicht sure muss ich diese hier tun oder, wenn sie widersprechen mit den in „außer“
Schwaches MyCommandBuilder als neues SqlCommandBuilder (gdaMyDataAdapter)
gdaMyDataAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand (zutreffend)

gdaMyDataAdapter.Fill (gdtMyDataTable)
MyDataGridView.DataSource = gdtMyDataTable

Enden-Unterseeboot

'Außer.  Benannt durch ein Verfahren des Knopfklicken-Ereignisses….

Allgemeines VorGridSave ()

Schwaches MyCommandBuilder als neues SqlCommandBuilder (gdaMyDataAdapter)

MyCommandBuilder.GetUpdateCommand ()

'Unterhalb zwei Anrufe scheinen, NICHTS zu tun.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

'Als Test, war ich in der Lage, das CommandText für den des DataAdapters UpdateCommand Gegenstand so aufzuheben:
gdaMyDataAdapter.UpdateCommand.CommandText = „“

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

Ende Sub


I möchte wissen, warum das GetInsertCommand und das GetDeleteCommand nicht die entsprechenden DataAdapter Befehlsgegenstände einstellen, aber das GetUpdate scheint, es allen zu umfassen (Einsatz/Löschung/Update) wenn ich viele Änderungen über das Rasterfeld mit einem einzelnen Anruf vornehme (DA. Update (Papierlösekorotron)).

Where, das ich gehe, ist, dass ich Mühe habe, das Update zu erhalten, um alles anders als NULL für „OtherKey“ einzusetzen.  MyKey ist in der zugrunde liegenden Tabelle, da eine Identitätsspalte und -es im Rasterfeld unsichtbar sind.  Ich lasse den Benutzer Reihen direkt dem Rasterfeld durch schreibenwerte hinzufügen in col1, in col2 und in col3.  Ich habe „OtherKey“, das in einer area per informazioni auf Form1 gespeichert wird.  Ich möchte „OtherKey“ im Rasterfeld unsichtbar sein und den Wert von einer Variable erhalten lassen, die von der area per informazioni eingestellt wurde.  Egal wie ich das UPDATE alles zwicke, das ich scheine, in der Lage zu sein, meine Tabelle zu senden bin ein NULL.

If, ich unklar bin oder, Sie benötigen mehr Info, mich bitte lassen know.

Regards,
Eric

Antwort : SQLCommandBuilder - GetUpdateCommand, GetInsertCommand und GetDeleteCommand Fragen

Zuerst ist diese Linie nicht erforderlich:

gdaMyDataAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand (zutreffend)

…, das ist, weil das SqlCommandBuilder das gegenwärtige SelectCommand vom DataAdapter nimmt, das zu ihm geführt wird, um das erforderliche InsertCommand, das DeleteCommand und das UpdateCommand zu erzeugen.  Da das DataAdapter durch Hinweis geführt wurde, bildeten die Änderungen innerhalb des CommandBuilder sind jetzt sichtbar zum Rest des Programms.

Ebenso ist die folgenden nicht erforderlich:

MyCommandBuilder.GetUpdateCommand ()

'Unterhalb zwei Anrufe scheinen, NICHTS zu tun.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

… aus dem selben Grund.  Sie führen dem Erbauer des CommandBuilder das DataAdpater, und alle erforderlichen Befehle werden automagically innerhalb des CommandBuilder eingestellt.

Weitere Lösungen  
 
programming4us programming4us