Pergunta : Perguntas de SQLCommandBuilder - de GetUpdateCommand, de GetInsertCommand e de GetDeleteCommand

Porque eu me afixei em minha pergunta precedente ter um VB app 2005 que indique 3 campos de uma tabela do SQL-Usuário em um DataGridView.  2 colunas são lá mas nao visíveis, including a chave preliminar.  Quando o código below “trabalhar” até a consignação das mudanças no controle de DataGridView à base de dados quando eu estalo a tecla de salvaguarda, eu não compreendo por que.  Eu olhei o CommandText para o objeto de UpdateCommand gerado pelo método de GetUpdateCommand e quando era legível, eu não poderia dizer como começ os parâmetros povoados.  Eu igualmente não poderia dizer como introduziria ou suprimiria de registros mas pareceu class= " lineNumbers " >
1 do >

    

'Declarado em um módulo de “Globals”:
gdaMyDataAdapter público como SqlDataAdapter novo
gdtMyDataTable público como DataTable novo

'Povoar a grade…
PopulateGrid secundário público ()

sSQL não ofuscante como a corda
NC não ofuscante como SqlConnection novo (MyConnectionString)
NC. Abrir ()

sSQL = “MyKey SELETO, col1, col2, col3, OtherKey de MyTable ONDE OtherKey = 1234”

cmdSelect não ofuscante como SqlCommand novo (sSQL, NC)
gdaMyDataAdapter.SelectCommand = cmdSelect

'Não sure eu preciso de fazer aqui estes ou se opor a esses em “excepto”
MyCommandBuilder não ofuscante como SqlCommandBuilder novo (gdaMyDataAdapter)
gdaMyDataAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand (verdadeiros)

gdaMyDataAdapter.Fill (gdtMyDataTable)
MyDataGridView.DataSource = gdtMyDataTable

Submarino da extremidade

'Excepto.  Chamado por um procedimento do evento do clique da tecla….

GridSave secundário público ()

MyCommandBuilder não ofuscante como SqlCommandBuilder novo (gdaMyDataAdapter)

MyCommandBuilder.GetUpdateCommand ()

'Abaixo de duas chamadas parecem não fazer NADA.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

'Como um teste, eu podia cancelar o CommandText para o objeto de UpdateCommand do DataAdapter como este:
gdaMyDataAdapter.UpdateCommand.CommandText = “emendas ”

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

O class= >

I da extremidade Sub

Where que eu estou indo é que eu estou tendo o problema conseguir a atualização introduzir qualquer coisa à excepção do ZERO para “OtherKey”.  MyKey está na tabela subjacente porque uma coluna e da identidade são invisíveis na grade.  Eu mando o usuário adicionar fileiras diretamente à grade por valores de dactilografia em col1, em col2 e em col3.  Eu tenho “OtherKey” armazenado em um TextBox em Form1.  Eu gostaria de mandar “OtherKey” ser invisível na grade e começ o valor de uma variável que fosse ajustada do TextBox.  Não importa como eu tweak toda que a ATUALIZAÇÃO eu pareço poder emitir minha tabela sou um NULL.

If eu sou obscuro ou você precisa any more informação, deixa-me por favor know.

Regards,
Eric
class= do

Resposta : Perguntas de SQLCommandBuilder - de GetUpdateCommand, de GetInsertCommand e de GetDeleteCommand

Antes de mais nada, esta linha não é necessário:

gdaMyDataAdapter.UpdateCommand = MyCommandBuilder.GetUpdateCommand (verdadeiro)

… que é porque o o SqlCommandBuilder toma o SelectCommand atual do DataAdapter que lhe é passado para gerar o InsertCommand, o DeleteCommand, e o UpdateCommand required.  Desde que o DataAdapter foi passado pela referência, as mudanças fizeram dentro do CommandBuilder são agora visíveis ao descanso do programa.

Do mesmo modo os seguintes não são necessários:

MyCommandBuilder.GetUpdateCommand ()

'Abaixo de duas chamadas parecer não fazer NADA.
MyCommandBuilder.GetDeleteCommand ()
MyCommandBuilder.GetInsertCommand ()

… para a mesma razão.  Você passa o DataAdpater ao construtor do CommandBuilder, e todos os comandos required são ajustados automagically dentro do CommandBuilder.

Outras soluções  
 
programming4us programming4us