Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

will_jdc

Salvar todas linhas do Listview no banco SQL

Recommended Posts

Bom Dia Galera,

 

Estou com um formulário que eu adiciono itens a uma listview( Um Item em cada Linha) e quando eu clico em salvar deveria salvar todos Itens no banco de dados SQL Server. Se Existir somente um Item ele Salva normalmente,porém se houverem mais de um Item Aparece a mensagem ("O nome da Variável já foi declarado, os nomes de variáveis devem ser exclusivos ..."). Como Faço para fazer com a variavel mude de acordo com as linhas do LIstView se for isso mesmo que deve ser feito ?

Segue Abaixo o codigo até o momento.

 

 

----------------------------------------------------------------------------------------------------------------------

 

 

Function SalvarItens()
        Dim sqlCon As New SqlConnection(StrCon)
        Dim sqlCmd As New SqlCommand


        Try
            sqlCon.Open()




            With sqlCmd
                .CommandType = CommandType.Text
                .CommandText = ""




                For Each item As ListViewItem In FrmOrcamentos.ListComprar.Items




                    .CommandText = "INSERT INTO Orcamentos (OrcNum,CodProd,DescProd,Quantidade) VALUES (@OrcNum,@CodProd,@DescProd,@Quantidade)"




                    .Connection = sqlCon


                    .Parameters.Add(New SqlParameter("@OrcNum", SqlDbType.NVarChar)).Value = FrmOrcamentos.LblNumOrc.Text
                    .Parameters.Add(New SqlParameter("@CodProd", SqlDbType.NVarChar)).Value = FrmOrcamentos.ListComprar.Items(0).Text
                    .Parameters.Add(New SqlParameter("@DescProd", SqlDbType.NVarChar)).Value = FrmOrcamentos.ListComprar.Items(0).SubItems(1).Text
                    .Parameters.Add(New SqlParameter("@Quantidade", SqlDbType.NVarChar)).Value = FrmOrcamentos.ListComprar.Items(0).SubItems(3).Text


                Next


            End With


            sqlCmd.ExecuteNonQuery()


            MsgBox("Item Cadastrado com Sucesso.", MsgBoxStyle.Information)


        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            sqlCmd.Parameters.Clear()
            sqlCon.Close()
        End Try


        Return True


    End Function

 

--------------------------------------------------------------------------------------------------------------------------------
SE PUDEREM ME AJUDAR EU AGRADEÇO, ENQUANTO ISSO VOU QUEBRANDO A CABEÇA AQUI ...
***** RESPEITO E ATITUDE *****

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de usar o For each você poderia usar o for comum:

 

 

 

For i As Integer = 0 To ListComprar.Items.Count - 1


            .CommandText = "INSERT INTO Orcamentos (OrcNum,CodProd,DescProd,Quantidade) VALUES (@OrcNum,@CodProd,@DescProd,@Quantidade)"


            .Connection = sqlCon

            .Parameters.Add(New SqlParameter("@OrcNum", SqlDbType.NVarChar)).Value = FrmOrcamentos.LblNumOrc.Text
            .Parameters.Add(New SqlParameter("@CodProd", SqlDbType.NVarChar)).Value = FrmOrcamentos.ListComprar.Items(i).Text
            .Parameters.Add(New SqlParameter("@DescProd", SqlDbType.NVarChar)).Value = FrmOrcamentos.ListComprar.Items(i).SubItems(1).Text
            .Parameters.Add(New SqlParameter("@Quantidade", SqlDbType.NVarChar)).Value = FrmOrcamentos.ListComprar.Items(i).SubItems(3).Text


        Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu Caro KhaosDoctor,

 

mudei o "For each" para o "for" comum, porém aparece a mesma mensagem de erro:

 

" O nome da Variavel "OrcNUm" já foi declarado,os nomes de variáveis devem ser exclusivos

em um lote de consulta ou em um procedimento armazenado"

 

essa mensagem só aparece se no meu listview tiver dois itens (duas Linhas)

se tiver só um Item (uma Linha) salva corretamente.

 

Como se eu tivesse que declarar uma variavel para cada linha do listview.( o Problema é que eu não sei como faze-lo, se esse for o caso )

 

Abraço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso também não vale a pena, criar uma variável por linha. Tente usar na query, ao invés de parâmetros o String.Format:

 


.CommandText = String.Format("INSERT INTO Orcamentos (OrcNum,CodProd,DescProd,Quantidade) VALUES ({0},{1},'{2}',{3})", valor0, valor1, valor2, valor3)

E delete os parâmetros do SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu Caro KhaosDoctor, Obrigado pela dica de utilizar o string.format,não aparece nenhuma mensagem de erro, Porém ele salva somente o que está na primeira linha do ListView , cada linha se refere a um produto diferente com (CodigodoProduto, DescricaodoProduto, Quantidade)

 

segue abaixo como esta o codigo do botão "Salvar"

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 Private Sub BtSalvar_Click(sender As System.Object, e As System.EventArgs) Handles BtSalvar.Click


        Dim sqlCon As New SqlConnection(Conexao.Conexao)
        Dim sqlCmd As New SqlCommand


        Try
            sqlCon.Open()




            With sqlCmd
                .CommandType = CommandType.Text
                .CommandText = ""




                For Each item As ListViewItem In ListComprar.Items




                    .CommandText = String.Format("INSERT INTO Orcamentos (OrcNum,CodProd,DescProd,Quantidade) VALUES ({0},{1},'{2}',{3})", LblNumOrc.Text, ListComprar.Items(0).Text, ListComprar.Items(0).SubItems(1).Text, ListComprar.Items(0).SubItems(3).Text)


                    .Connection = sqlCon




                Next


            End With


            sqlCmd.ExecuteNonQuery()


            MsgBox("Registro Inserido com Sucesso.", MsgBoxStyle.Information)


        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            sqlCmd.Parameters.Clear()
            sqlCon.Close()
        End Try
    End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei se eu estou pensando errado, mas e se o usuário inserir muitos itens vão existir muitas linhas no listview,eu não teria que colocar uma forma de salvar todas as linhas independente da quantidade que o usuário adicione?

 

Desculpe a ignorância, sou novato em programação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, é por isso que estamos usando o Format, você atribui variáveis para os mais diversos itens da sua listview, e essas variáveis vão mudar de item para item, por isso o for passa por todos os itens pegando o index do contador e adicionando na lista.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Private Sub BtSalvar_Click(sender As System.Object, e As System.EventArgs) Handles BtSalvar.Click


Dim sqlCon As New SqlConnection(Conexao.Conexao)

Dim sqlCmd As New SqlCommand


Try


sqlCon.Open()


With sqlCmd


.CommandType = CommandType.Text

.CommandText = ""


For i As Integer = 0 To ListComprar.Items.Count - 1


.CommandText = String.Format("INSERT INTO Orcamentos (OrcNum,CodProd,DescProd,Quantidade) VALUES ({0},{1},'{2}',{3})", LblNumOrc.Text, ListComprar.Items(i).Text, ListComprar.Items(i).SubItems(1).Text, ListComprar.Items(i).SubItems(3).Text)


.Connection = sqlCon


Next


End With


sqlCmd.ExecuteNonQuery()


MsgBox("Itens Cadastrados com Sucesso.", MsgBoxStyle.Information)


Catch ex As Exception

MsgBox(ex.Message)

Finally

sqlCmd.Parameters.Clear()

sqlCon.Close()

End Try



End Sub





Salva somente o ultimo Item Da "listView"


Estou fazendo alguma coisa errada ???

Compartilhar este post


Link para o post
Compartilhar em outros sites
Boa Noite KhaosDoctor,acontece
Consegui resolver o problema, acontece que
Private Sub BtSalvar_Click(sender As System.Object, e As System.EventArgs) Handles BtSalvar.Click
Dim sqlCon As New SqlConnection(Conexao.Conexao)
Dim sqlCmd As New SqlCommand
Try
sqlCon.Open()
With sqlCmd
.CommandType = CommandType.Text
.CommandText = ""
For i As Integer = 0 To ListComprar.Items.Count - 1
.CommandText = String.Format("INSERT INTO Orcamentos (OrcNum,CodProd,DescProd,Quantidade) VALUES ({0},{1},'{2}',{3})", LblNumOrc.Text, ListComprar.Items(i).Text, ListComprar.Items(i).SubItems(1).Text, ListComprar.Items(i).SubItems(3).Text)
.Connection = sqlCon
sqlCmd.ExecuteNonQuery()
Next
End With
MsgBox("Itens Cadastrados com Sucesso.", MsgBoxStyle.Information)
Catch ex As Exception
MsgBox(ex.Message)
Finally
sqlCmd.Parameters.Clear()
sqlCon.Close()
End Try
End Sub


No Código Acima, o "sqlCmd.ExecuteNonQuery()" estava fora do "Next"

Então só era salvo uma linha, foi só colocar ele dentro do "Next" que deu certo

 

 

Muito Obrigado pela ajuda e pela atenção atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.