none
Multiplo insert usando data set RRS feed

  • Pergunta

  • Seguinte pessoal, estou usando o banco de dados sqlserver ce para fazer um sistem de gerenciamento de prova... estou usando o c#

    criei meu banco direitinho, fiz os relacionamentos, e estou fazendo tudo (inserts) por meio de data set, ai chego numa parte do meu formulario em que a pessoa pode inserir uma pergunta com ate 5 alternativas ...

    na minha tabela Perguntas eu tenho as Alternativas como um atributo multi valorado, ou seja eu tenho uma tabela soh pra alternativa devidamente relacionada.

    Meu problema é que estou numa parte onde meu formulario segue desse jeito: 1 textbox pra digitar pergunta, e 5 texts pra digitar as alternativas, com a "pergunta" nao tenho problema, porém como as alternativas sao 5, e estou usando o data set, nao consigo fazer com 5 inserts de uma soh vez, pois qdo clico no "submit" da ____(asvezes soh insere o primeiro campo).

    Preciso de alguma solução para poder fazer 5 inserts de uma soh vez

    Obrigado!

    quinta-feira, 12 de agosto de 2010 02:30

Respostas

  • Tu pode percorrer teus controles e montar uma instrução SQL com vários inserts, um depois do outro, e executar a query, com um command normal, ou usar o dataadpter. Dá uma olhada neste artigo do Macoratti, acho q vai t ajudar:

    http://www.macoratti.net/vbn_dat1.htm

    Documentação do MSDN:

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.insertcommand.aspx

    Code project:

    http://www.codeproject.com/KB/database/relationaladonet.aspx


    Gabriel Bauermann
    • Marcado como Resposta Fabio R. Luz sábado, 14 de agosto de 2010 03:27
    sexta-feira, 13 de agosto de 2010 12:02
  • Olá!

    Eu fiz um exemplo usando as classes do SqlClient, no seu cenário coloque use as classes do SqlCe.

    abaixo a estrutura da tabela usada:

     

    create table tb_teste
    (
     id_teste int,
     mn_teste varchar(10)
    )

    O código abaixo cria um datatable com a estrutura da tabela, inseri alguns registros e atualiza no banco em lote

    private void Insert()
      {
       DataTable table = new DataTable();
       table.Columns.Add("id_teste");
       table.Columns.Add("mn_teste");
    
       DataRow row1 = table.NewRow();
       row1[0] = 1;
       row1[1] = "Anderson";
    
       DataRow row2 = table.NewRow();
       row2[0] = 1;
       row2[1] = "Melo";
    
       table.Rows.Add(row1);
       table.Rows.Add(row2);
    
       using (SqlConnection connection =
        new SqlConnection("CONNECTION"))
       {
        SqlDataAdapter adapter = new SqlDataAdapter("select * from tb_teste", connection);
        SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
        adapter.InsertCommand = cmdBuilder.GetInsertCommand();
    
        adapter.Update(table);
       }
    
      }

    Espero ter ajudado

    Anderson
     

    • Marcado como Resposta Fabio R. Luz sábado, 14 de agosto de 2010 03:27
    sexta-feira, 13 de agosto de 2010 12:33

Todas as Respostas

  • Tu usa DataAdatper? Se não, recomendo. Ele permite inserir vários registros. Se já estiver usando, posta teu código pra gnt dar uma olhada.

    Gabriel Bauermann
    quinta-feira, 12 de agosto de 2010 19:21
  • Entao, não estou usando data adapter, e nao sei como funciona, eu adicionei o componente sqlCeDataAdapter mas nao sei usa-lo.

    Reparei que eu posso colocar meu propio InsertCommand via SQL, e isso vai ser bem util pra mim...

    Agora quanto ao meu codigo, esse formulario nao tem quase nada então eh desnecessario posta-lo, mas vou dar uma resumida no que eu preciso:

    Imagina que eu tenho uma tabela MENSAGENS, com um identificador autoincrement e um campo pra mensagem varchar

    Eu quero ir no meu data set e arrastar varios "mensagens" (como textbox) para o formulario e qdo eu der o submit ele insira todos de uma vez!

    NOTA: eu deletei aquela barra do topo, e mandei o metodo AddNew no onload do formulario, criei um button que colei o codigo do "disquetinho".

    Obrigado!

    quinta-feira, 12 de agosto de 2010 23:49
  • Tu pode percorrer teus controles e montar uma instrução SQL com vários inserts, um depois do outro, e executar a query, com um command normal, ou usar o dataadpter. Dá uma olhada neste artigo do Macoratti, acho q vai t ajudar:

    http://www.macoratti.net/vbn_dat1.htm

    Documentação do MSDN:

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.insertcommand.aspx

    Code project:

    http://www.codeproject.com/KB/database/relationaladonet.aspx


    Gabriel Bauermann
    • Marcado como Resposta Fabio R. Luz sábado, 14 de agosto de 2010 03:27
    sexta-feira, 13 de agosto de 2010 12:02
  • Olá!

    Eu fiz um exemplo usando as classes do SqlClient, no seu cenário coloque use as classes do SqlCe.

    abaixo a estrutura da tabela usada:

     

    create table tb_teste
    (
     id_teste int,
     mn_teste varchar(10)
    )

    O código abaixo cria um datatable com a estrutura da tabela, inseri alguns registros e atualiza no banco em lote

    private void Insert()
      {
       DataTable table = new DataTable();
       table.Columns.Add("id_teste");
       table.Columns.Add("mn_teste");
    
       DataRow row1 = table.NewRow();
       row1[0] = 1;
       row1[1] = "Anderson";
    
       DataRow row2 = table.NewRow();
       row2[0] = 1;
       row2[1] = "Melo";
    
       table.Rows.Add(row1);
       table.Rows.Add(row2);
    
       using (SqlConnection connection =
        new SqlConnection("CONNECTION"))
       {
        SqlDataAdapter adapter = new SqlDataAdapter("select * from tb_teste", connection);
        SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
        adapter.InsertCommand = cmdBuilder.GetInsertCommand();
    
        adapter.Update(table);
       }
    
      }

    Espero ter ajudado

    Anderson
     

    • Marcado como Resposta Fabio R. Luz sábado, 14 de agosto de 2010 03:27
    sexta-feira, 13 de agosto de 2010 12:33
  • Entao pessoal depois e estudar um pouco optei por usar um Command normal como disse Gabriel Bauermann...

    O data table do Anderson Mello tbm usei, mas em outra ocasiao aqui ...

    Muito obrigado a todos!

    sábado, 14 de agosto de 2010 03:27