Question

Sir, I am trying to insert datas to database i Am using vb2008 and sql as backend

the error is "The variable name '@Item' has already been declared. Variable names must be unique within a query batch or stored procedure."

here are my codes

Private Sub ButtonSubmit_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSubmit.Click

        con = New SqlConnection(s)
        con.Open()

        sql = "INSERT INTO TableSpecial (RequestNo, RegNo, JobNumber, Kilometer, Preparedby, GzlNo, Chassis, Engine, VehicleType, Division, Createdby, Date) VALUES (@RequestNo, @RegNo, @JobNumber, @Kilometer, @Preparedby, @GzlNo, @Chassis, @Engine, @VehicleType, @Division, @Createdby, @Date)"
        cmd = New SqlCommand(sql, con)


        cmd.Parameters.Add("@RequestNo", SqlDbType.NChar).Value = Trim(LabelReqNo.Text)
        cmd.Parameters.Add("@RegNo", SqlDbType.NChar).Value = Trim(ListBoxRegNo.SelectedItem)
        cmd.Parameters.Add("@JobNumber", SqlDbType.NChar).Value = Trim(TextBoxJobNo.Text)
        cmd.Parameters.Add("@Kilometer", SqlDbType.NChar).Value = Trim(TextBoxKM.Text)
        cmd.Parameters.Add("@Preparedby", SqlDbType.NChar).Value = Trim(TextBoxReqby.Text)
        cmd.Parameters.Add("@Createdby", SqlDbType.NChar).Value = Trim(TextBoxPreparedby.Text)
        cmd.Parameters.Add("@GzlNo", SqlDbType.NChar).Value = Trim(LabelGzlNo.Text)
        cmd.Parameters.Add("@Division", SqlDbType.NChar).Value = Trim(LabelDivision.Text)
        cmd.Parameters.Add("@Chassis", SqlDbType.NVarChar).Value = Trim(LabelChassis.Text)
        cmd.Parameters.Add("@Engine", SqlDbType.NVarChar).Value = Trim(LabelEngine.Text)
        cmd.Parameters.Add("@VehicleType", SqlDbType.NVarChar).Value = Trim(LabelVehicleType.Text)
        cmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = LabelTime.Text


        For Each row As DataGridViewRow In DataGridView1.Rows

            If Not row.IsNewRow Then

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

                    cmd.Parameters.Add("Item", SqlDbType.NVarChar).Value = Me.DataGridView1.Rows(i).Cells("Itemm").Value
                    cmd.Parameters.Add("Qty", SqlDbType.NChar).Value = Me.DataGridView1.Rows(i).Cells("Qtyy").Value



                Next
                'cmd.Parameters.Add("@Item", SqlDbType.NVarChar).Value = row.Cells(0).Value.ToString
                ' cmd.Parameters.Add("@Qty", SqlDbType.NChar).Value = row.Cells(1).Value.ToString

            End If

        Next
        Dim result As Integer

        result = cmd.ExecuteNonQuery()

        If result = 1 Then
            MsgBox("Saved!!", MsgBoxStyle.Information, _
                   "Success")

        Else
            MsgBox("Updation incomplete!!", MsgBoxStyle.Information, _
                   "Updation not complete")
        End If
        con.Close()
        Autogenerate_ReqNo()

    End Sub
Was it helpful?

Solution

You cannot insert multiple records in one insert values statement. The execute statement needs to be called once per row. In that case then rhe same cmd object is being used for every call within the loop. This is ok for the first iteration through the loop but for the second and all subsequent iterations the cmd object already has a parameter with the name "item" added. You need to clear the command parameters within the loop. Try adding cmd.Parameters.Clear() at the start of the loop.

OTHER TIPS

Insert seperately and use

cmd.Parameters.Clear()

between every insert if you use the same SQLCommand object.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top