Vraag : SQLCommandBuilder - Vragen GetUpdateCommand, GetInsertCommand en GetDeleteCommand

Aangezien ik in mijn vorige vraag postte heb ik een VB 2005 app die de vertoningen 3 gebieden van een sQL-Server in een DataGridView indienen.  2 kolommen zijn daar maar niet zichtbaar, met inbegrip van de primaire sleutel.  Terwijl de onderstaande code „werkt“ voor zover begaand de veranderingen in DataGridView aan het gegevensbestand controleer wanneer ik sparen knoop klik, begrijp ik waarom niet.  Ik bekeek in CommandText voor het voorwerp UpdateCommand door de methode GetUpdateCommand wordt geproduceerd en terwijl het leesbaar was, kon ik niet vertellen hoe het de parameters die bevolkt kreeg.  Ik kon niet ook vertellen hoe het verslagen of schrappen zou zou opnemen maar het scheen 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:
    

'Verklaard in een Module „Globals“:
Openbare gdaMyDataAdapter als Nieuwe SqlDataAdapter
Openbare gdtMyDataTable als Nieuwe DataTable

'Bevolk het Net…
Openbare SubPopulateGrid ()

Schemerige sSQL als Koord
Schemerige cn als Nieuwe SqlConnection (MyConnectionString)
cn. Open ()

sSQL = „UITGEZOCHTE MyKey, col1, col2, col3, OtherKey VAN MyTable WAAR OtherKey = 1234“

Schemerige cmdSelect als Nieuwe SqlCommand (sSQL, cn)
gdaMyDataAdapter.SelectCommand = cmdSelect

De 'niet zekere behoefte van I om deze hier te doen of als zij met degenen in „sparen“ strijdig zijn
Schemerige MyCommandBuilder als Nieuwe SqlCommandBuilder (gdaMyDataAdapter)
gdaMyDataAdapter.UpdateCommand = (Ware) MyCommandBuilder.GetUpdateCommand

(gdtMyDataTable) gdaMyDataAdapter.Fill
MyDataGridView.DataSource = gdtMyDataTable

Sub van het eind

'Sparen.  Geroepen door een knoop klik gebeurtenisprocedure….

Openbare SubGridSave ()

Schemerige MyCommandBuilder als Nieuwe SqlCommandBuilder (gdaMyDataAdapter)

MyCommandBuilder.GetUpdateCommand ()

'Onder twee vraag schijn om NIETS te doen.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

'Als test, kon ik CommandText voor het voorwerp van UpdateCommand van DataAdapter als dit met voeten treden:
gdaMyDataAdapter.UpdateCommand.CommandText = de „“

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

Het eind Sub


I zou willen weten waarom GetInsertCommand en GetDeleteCommand niet de overeenkomstige DataAdapter bevelvoorwerpen plaatsen maar GetUpdate schijnt om het allen (het Tussenvoegsel/schrapt/Update) te behandelen wanneer ik vele veranderingen via het net met één enkele vraag aanbreng (DA. Update (dt)).

Where ik ben ga dat ik probleem heb die de Update ertoe brengen om om het even wat buiten ONGELDIG voor „OtherKey“ op te nemen.  MyKey is in de onderliggende lijst als identiteitskolom en het is onzichtbaar in het net.  Ik heb de gebruiker rijen aan het net rechtstreeks toevoegen door waarden in col1, col2 en col3 te typen.  Ik heb „OtherKey“ in een TextBox op Form1 wordt opgeslagen die.  Ik zou „OtherKey“ willen hebben onzichtbaar in het net zijn en de waarde van een variabele krijgen die van TextBox werd geplaatst.  Geen kwestie hoe ik de alle UPDATE ik schijn knijp mijn lijst kunnen verzenden ben een NULL.

If ik ben onduidelijk of u hebt any more info nodig, te laten gelieve me know.

Regards,
Eric

Antwoord : SQLCommandBuilder - Vragen GetUpdateCommand, GetInsertCommand en GetDeleteCommand

Eerst en vooral, is deze lijn niet nodig:

gdaMyDataAdapter.UpdateCommand = (Ware) MyCommandBuilder.GetUpdateCommand

… dat is omdat SqlCommandBuilder huidige SelectCommand van DataAdapter neemt die tot het wordt overgegaan om vereiste InsertCommand, DeleteCommand, en UpdateCommand te produceren.  Aangezien DataAdapter door verwijzing werd overgegaan, zijn de veranderingen binnen CommandBuilder worden aangebracht nu zichtbaar aan de rest van het programma dat.

Eveneens is het volgende niet nodig:

MyCommandBuilder.GetUpdateCommand ()

'Onder twee vraag schijn om NIETS te doen.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

… om de zelfde reden.  U gaat DataAdpater tot de aannemer van CommandBuilder over, en alle vereiste bevelen zijn automagically plaatsen binnen CommandBuilder.

Andere oplossingen  
 
programming4us programming4us