Jump to content
Sign in to follow this  
Chamuanza

Erro a Inserir Dados na BD

Recommended Posts

Chamuanza

Oi Pessoal um bem aja

Preciso de uma ajuda - Tenho este código que já funcionou por 2 vezes, ou seja ja coloquei 2 registos na tabela, mas agora sem razão aparente da-me este erro na linha  Dim x As Integer = command.ExecuteNonQuery():

The variable name '@Data' has already been declared. Variable names must be unique within a query batch or stored procedure.

 ' Texto de ligação à base de dados 
        Dim myConnectionString As String = _
          "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\ProjectoTotoMilhoes\TotoMilhões\GuardarResultados.mdf';" & _
          ";Integrated Security=True;User Instance=True"

        ' Comando que irá inserir dados na tabela "PremiosEuromilhoes" 
        Dim SQL As String = "INSERT INTO PremiosEuromilhoes([Data], [DiaSemana], [N1], [N2], [N3], [N4], [N5], [E1], [E2]) VALUES (@Data, @DiaSemana, @N1, @N2, @N3, @N4, @N5, @E1, @E2);"

        ' Cria uma nova ligação à base de dados 
        Dim connection As New SqlConnection(myConnectionString)
        ' Criação do comando indicando a instrução e a ligação 
        Dim command As New SqlCommand(SQL, connection)

        Dim ContadorPremios As Byte


        For Linhas As Integer = 0 To NumJogadosEuromilhoesDataGridView.RowCount - 1

            For Colunas As Byte = 3 To 3

                If NumJogadosEuromilhoesDataGridView.Item(3, Linhas).Selected = True Then
                    ContadorPremios += 1
                    command.Parameters.Add("@Data", SqlDbType.DateTime).Value = NumJogadosEuromilhoesDataGridView.Item(1, Linhas).Value
                    command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(2, Linhas).Value
                    command.Parameters.Add("@N1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(4, Linhas).Value
                    command.Parameters.Add("@N2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(5, Linhas).Value
                    command.Parameters.Add("@N3", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(6, Linhas).Value
                    command.Parameters.Add("@N4", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(7, Linhas).Value
                    command.Parameters.Add("@N5", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(8, Linhas).Value

                    command.Parameters.Add("@E1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(9, Linhas).Value
                    command.Parameters.Add("@E2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(10, Linhas).Value

                End If
            Next Colunas
        Next Linhas


        TextBox3.Text = ContadorPremios



        ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos 
        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

        ' Fecha a ligação e limpa as variáveis 
        connection.Close()
        connection = Nothing
        command = Nothing

Share this post


Link to post
Share on other sites
Caça

É normal, só podes adicionar uma vez o mesmo parâmetro. Se depois quiseres adicionar outros tens de limpar o actuais

Defines os parâmetros antes do ciclo sem lhe atribuires valor nenhum e depois dentro do ciclo é que lhe atribuis os valores, mas para esse código ter sentido tens de colocar também a linha .ExecuteNonQuery() dentro do ciclo.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Chamuanza

Oi Caça Obrigado pela atenção

Tenho vindo a tentar colocar a linha que indicas em varias posições dentro de ambos os ciclos mas com esta posição que envio dame este erro na linha    connection.Open()  "Object reference not set to an instance of an object." 

 ' Texto de ligação à base de dados 
        Dim myConnectionString As String = _
          "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\ProjectoTotoMilhoes\TotoMilhões\GuardarResultados.mdf';" & _
          ";Integrated Security=True;User Instance=True"

        ' Comando que irá inserir dados na tabela "PremiosEuromilhoes" 
        Dim SQL As String = "INSERT INTO PremiosEuromilhoes([DiaSemana], [Data],[N1], [N2], [N3], [N4], [N5], [E1], [E2]) VALUES (@DiaSemana, @Data, @N1, @N2, @N3, @N4, @N5, @E1, @E2);"

        ' Cria uma nova ligação à base de dados 
        Dim connection As New SqlConnection(myConnectionString)
        ' Criação do comando indicando a instrução e a ligação 
        Dim command As New SqlCommand(SQL, connection)

        Dim ContadorPremios As Byte

       

        For Linhas As Integer = 0 To NumJogadosEuromilhoesDataGridView.RowCount - 2

            For Colunas As Integer = 3 To 3

                If NumJogadosEuromilhoesDataGridView.Item(3, Linhas).Selected = True Then
                    ContadorPremios += 1

                    command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(2, Linhas).Value
                    command.Parameters.Add("@Data", SqlDbType.DateTime).Value = NumJogadosEuromilhoesDataGridView.Item(1, Linhas).Value
                    command.Parameters.Add("@N1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(4, Linhas).Value
                    command.Parameters.Add("@N2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(5, Linhas).Value
                    command.Parameters.Add("@N3", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(6, Linhas).Value
                    command.Parameters.Add("@N4", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(7, Linhas).Value
                    command.Parameters.Add("@N5", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(8, Linhas).Value

                    command.Parameters.Add("@E1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(9, Linhas).Value
                    command.Parameters.Add("@E2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item(10, Linhas).Value

                End If

                ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos 
                connection.Open()

                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If

                ' Fecha a ligação e limpa as variáveis 
                connection.Close()
                connection = Nothing
                command = Nothing
                
            Next Colunas

           
        Next Linhas

       

        connection = Nothing

        command = Nothing


        TextBox3.Text = ContadorPremios

Share this post


Link to post
Share on other sites
bioshock
Connection.Open()
For i As Integer = 0 To xpto.Count - 1
    Dim query As String = "INSERT ...."
    Dim command As New SqlCommand(query, connection)
    command.Parameters.Add(....)
    command.ExecuteNonQuery()
Next
Connection.Close()

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.