Maideen Abdul Kader Ответов: 1

Как вставить данные из gridview с установленным флажком?


Привет
У меня есть проблема с вставкой данных из проверенного элемента Gridview
Если я отмечаю несколько строк, то сначала отмеченные данные вставляются только в таблицу.

Пожалуйста, помогите мне

Что я уже пробовал:

Я уже пробовал это

cmd = New SqlCommand
cmd.Connection = conn
For Each gvrow As GridViewRow In gvSubjects.Rows
    Dim chkSelect As CheckBox = DirectCast(gvrow.FindControl("chkSelect"), CheckBox)
    If chkSelect.Checked Then

        cmd.CommandText = "insert into ADM_Faculty_Subject (Code, Name, Classes, SubName, Charges, Location) values ('" + Me.txtCode.Text + _
                                  "','" + Me.txtName.Text + _
                                  "','" + gvrow.Cells(2).Text + _
                                  "','" + gvrow.Cells(3).Text + _
                                  "','" + gvrow.Cells(4).Text + _
                                  "','" + Me.cboLocation.SelectedValue + "')"

        cmd.CommandType = CommandType.Text
        conn.Open()
        cmd.ExecuteNonQuery()
        cmd = Nothing
        conn.Close()
    End If
Next

1 Ответов

Рейтинг:
10

Richard Deeming

Начните с фиксации SQL-инъекция[^] уязвимость в вашем коде.

Затем вам нужно удалить строку, которая устанавливает cmd возражать Nothing для каждой итерации.

Вероятно, вы также захотите обернуть весь блок в транзакцию, чтобы предотвратить частичные вставки.

Using conn As New SqlConnection("YOUR CONNECTION STRING HERE")
    conn.Open()
    
    Using transaction As SqlTransaction = conn.BeginTransaction()
        Using cmd As New SqlCommand("insert into ADM_Faculty_Subject (Code, Name, Classes, SubName, Charges, Location) values (@Code, @Name, @Classes, @SubName, @Charges, @Location)", conn, transaction)
            
            cmd.CommandType = CommandType.Text
            
            ' TODO: Correct data types and sizes for the parameters to match the columns:
            Dim pCode As SqlParameter = cmd.Parameters.Add("@Code", SqlDbType.VarChar, 50)
            Dim pName As SqlParameter = cmd.Parameters.Add("@Name", SqlDbType.VarChar, 50)
            Dim pClasses As SqlParameter = cmd.Parameters.Add("@Classes", SqlDbType.VarChar, 50)
            Dim pSubName As SqlParameter = cmd.Parameters.Add("@SubName", SqlDbType.VarChar, 50)
            Dim pCharges As SqlParameter = cmd.Parameters.Add("@Charges", SqlDbType.VarChar, 50)
            Dim pLocation As SqlParameter = cmd.Parameters.Add("@Location", SqlDbType.VarChar, 50)
            
            pCode.Value = Me.txtCode.Text
            pName.Value = Me.txtName.Text
            pLocation.Value = Me.cboLocation.SelectedValue
            
            For Each gvrow As GridViewRow In gvSubjects.Rows
                Dim chkSelect As CheckBox = DirectCast(gvrow.FindControl("chkSelect"), CheckBox)
                If chkSelect.Checked Then
                    pClasses.Value = gvrow.Cells(2).Text
                    pSubName.Value = gvrow.Cells(3).Text
                    pCharges.Value = gvrow.Cells(4).Text
                    cmd.ExecuteNonQuery()
                End If
            Next
        End Using
        
        transaction.Commit()
    End Using
End Using


Maideen Abdul Kader

Большое спасибо..