none
DatagridView mandar Base de Dados RRS feed

  • Pergunta

  • Boas pessoal , 
    Tenho uma datagridview onde mando para lá valores atraves das textbox, e estavam a mandar da datagridview para a base de dados , mas dá-me erro de que (O índice estava fora do intervalo. Tem de ser não negativo e inferior ao tamanho da colecção.
    Nome do parâmetro: index)

     Const constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Acer\Desktop\Base de Dadosmdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

            Dim db As New SqlConnection(constr)
            db.Open()
            Dim varsql As String
            varsql = "insert into Vendas(Codigo_Vendas, Unidades, Produto, Subtotal, Total)" & "values(@Codigo_Vendas, @Unidades, @Produto, @Subtotal, @Total)"
            Dim cmd As New SqlCommand(varsql, db)


            For i As Integer = 0 To DataGridView1.RowCount - 1

                cmd.Parameters.Add(New SqlParameter("@Codigo_Vendas", txtvendas.Text))
                cmd.Parameters.Add(New SqlParameter("@Unidades", DataGridView1.Rows(i).Cells(1).Value))
                cmd.Parameters.Add(New SqlParameter("@Produto", DataGridView1.Rows(i).Cells(2).Value))
                cmd.Parameters.Add(New SqlParameter("@Subtotal", DataGridView1.Rows(i).Cells(3).Value)) 'da o erro
                'cmd.Parameters.AddWithValue("@Subtotal", DataGridView1.Rows(i).Cells(3).Value)
                cmd.Parameters.Add(New SqlParameter("@Total", Lbtotal.Text))

                cmd.ExecuteNonQuery()
            Next

            db.Open()
            MsgBox(" inserido com sucesso!", MsgBoxStyle.Information, "Mensagem de Confirmação")

    quinta-feira, 17 de abril de 2014 16:48

Todas as Respostas

  • Olá JotaMax, pelo erro diz que essa célula não existe !! Lembre-se que as celulas do datagrid iniciam com o indice 0, então sua primeira celcula usa o indice 0, não o 1, teste assim que deve funcionar. 
    quinta-feira, 17 de abril de 2014 17:02
  • Já comecei em 0, ele guarda não base de dados mas dá-me erro no codigo de vendas dizendo que O nome da variável '@ Codigo_Vendas' já foi declarado. Nomes de variáveis ​​devem ser exclusivos dentro de um lote de consulta ou procedimento armazenado.
    quinta-feira, 17 de abril de 2014 18:30
  • Olá, estranho como ficou seu codigo agora ! 

    Tente usar cmd.Parameters.AddWithValue(.........

    Essa variável se está em aspas não faz sentido isso ! Você declarou essa CodigoVendas em algum lugar ?

    quinta-feira, 17 de abril de 2014 19:26
  • Sim declarei numa função, o codigo_vendas vai sendo incrementado.. Se eu tiver mais que uma linha na grelha de dados ele só me manda para a base de dados a primeira linha.
    quinta-feira, 17 de abril de 2014 20:47