none
Enviar todos os itens de um listbox para banco de dados SQL Server RRS feed

  • Pergunta

  • Boa tarde pessoal.

    Estou desenvolvendo um programa em C# Windows Forms, tenho uma ListBox e preciso salvar (no caso fazer um update) estes itens para uma tabela do SQL Server, mesmo utilizando qualquer estrutura de repetição (For, ForEach e ou While), é feito a leitura mas salva somente um único item. Já declarei uma variável para estes itens e mesmo assim sempre salva um único item na tabela.

    Preciso de uma solução com urgência.

    Desde já agradeço a atenção de todos. Rogério.

    Segue o código:

    SqlConnection conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DBbookstore;Data Source=conexão");
                SqlCommand GravaGenerico = new SqlCommand("UPDATE tb_Status SET NomeDoLivro=@NomeDoLivro, Nome=@Nome, Email=@Email, TelefoneCliente=@TelefoneCliente, LivrosRetirados=@LivrosRetirados, LivrosDevolvidos=@LivrosDevolvidos WHERE IDStatus=@IDStatus", conn);
    
                int i = 0;
    
                GravaGenerico.Parameters.Add("@IDStatus", SqlDbType.Int).Value = lblGravaID.Text;
                GravaGenerico.Parameters.Add("@NomeDoLivro", SqlDbType.Text).Value = Lista3.Items[i++].ToString().Trim();
                GravaGenerico.Parameters.Add("@Nome", SqlDbType.VarChar).Value = lblGravaNome.Text;
                GravaGenerico.Parameters.Add("@Email", SqlDbType.VarChar).Value = lblGravaEmail.Text;
                GravaGenerico.Parameters.Add("@TelefoneCliente", SqlDbType.Char).Value = lblGravaTelefone.Text;
                GravaGenerico.Parameters.Add("@LivrosRetirados", SqlDbType.Char).Value = lblGravaRetirada.Text;
                GravaGenerico.Parameters.Add("@LivrosDevolvidos", SqlDbType.Char).Value = lblGravaEntrega.Text;
    
    
                SqlCommand contaItem = new SqlCommand("UPDATE tb_in_stock SET QuantidadeDeLivros=@QuantidadeDeLivros WHERE IDStock=@IDStock", conn);
    
                contaItem.Parameters.Add("@IDStock", SqlDbType.Int).Value = lblIDLivro.Text;
                contaItem.Parameters.Add("@QuantidadeDeLivros", SqlDbType.Char).Value = lblQuantidade.Text;
    
                
                MessageBox.Show("Seleção gravado com sucesso.");
                
    
                try
                {
                    
                    conn.Open();
                    GravaGenerico.ExecuteNonQuery();
                    contaItem.ExecuteNonQuery();
    
                    lblIDLivro.Text = string.Empty;
                    lblNomeLivro.Text = string.Empty;
                    lblQuantidade.Text = string.Empty;
    
                    Lista3.Items.Clear();
                    Lista2.Items.Clear();
    
                }
    
    
                catch (Exception ex)
                {
                    MessageBox.Show("Por favor ao selecionar um livro certifique-se que ele foi enviado para o lado direito da seleção", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    MessageBox.Show(ex.Message, "Erro ");
                }
                finally
    
                {
                    conn.Close();
                }
                
            }

    Observação:

    O código funciona para todos os itens menos para listbox.

    domingo, 4 de abril de 2021 18:58

Todas as Respostas


  • Criptografia MD5,

    Não tenho certeza se é isto que você quer, mas veja "SqlBulkCopy". 

    ===================================
    Como usar o envio em lote para melhorar o desempenho do banco de dados SQL

    Estratégias de envio em lote
    Cópia em massa do SQL

    using (SqlConnection connection = new SqlConnection(CloudConfigurationManager.GetSetting("Sql.ConnectionString")))
    {
        connection.Open();
    
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
        {
            bulkCopy.DestinationTableName = "MyTable";
            bulkCopy.ColumnMappings.Add("mytext", "mytext");
            bulkCopy.ColumnMappings.Add("num", "num");
            bulkCopy.WriteToServer(table);
        }
    }

    https://docs.microsoft.com/pt-br/azure/azure-sql/performance-improve-use-batching
    ===================================

    Talvez seja possível adaptar este exemplo em Entity Framework:

    ===================================
    EF Core – Copiando dados de um ListBox para o SQL Server
    2 NOV, 2018

    http://www.macoratti.net/18/08/efcore_copsql1.htm
    ===================================

    []'s,
    Fabio I.
    segunda-feira, 5 de abril de 2021 20:03