2014-11-14 3 views
2

Я пытаюсь обновить базу данных через datagridview, но проблема, с которой я сталкиваюсь, заключается в том, что она обновляет только первую строку в datagridview. Благодарю вас за понимание.Обновление команды только обновления первой строки vb.net

Dim Connection As New OleDbConnection(Get_Constring) 


    Dim dt As DataTable = New DataTable("SendTable") 
    Dim row As DataRow 
    dt.Columns.Add("ID", Type.GetType("System.Int32")) 
    dt.Columns.Add("Attendance", Type.GetType("System.String")) 
    For i = 0 To ClassRegisterdgv.Rows.Count - 1 
     ' If ClassRegisterdgv.Rows(i).Cells(4).Value.Equals("") Then ClassRegisterdgv.Rows(i).Cells(4).Value.Equals("Present") 
     Dim ID As Integer = ClassRegisterdgv.Rows(i).Cells(0).Value 
     Dim Attendance As String = ClassRegisterdgv.Rows(i).Cells(4).Value 
     row = dt.Rows.Add 
     row.Item("ID") = ID 
     row.Item("Attendance") = Attendance 
    Next 
    If Connection.State = ConnectionState.Closed Then 
     Connection.Open() 
    End If 
    Dim sqlquery As String = "UPDATE PupilInfo SET " & NewColumnCreated & " = @Attendance WHERE ID = @ID" 
    Dim sqlcommand As New OleDbCommand 

    For Each newrow As DataRow In dt.Rows 
     'For i = 0 To ClassRegisterdgv.Rows.Count - 1 
     With sqlcommand 
      .CommandText = sqlquery 
      .Parameters.AddWithValue("@Attendance", newrow.Item(1)) 
      .Parameters.AddWithValue("@ID", newrow.Item(0)) 
      .Connection = Connection 
      MessageBox.Show(newrow.Item(1) & newrow.Item(0)) 
      .ExecuteNonQuery() 

     End With 
    Next 

    Connection.Close() 
    ClassRegisterdgv.DataSource = Nothing 
    dt.Clear() 
+0

Похоже, что ваша логика «.Add» использует тот же «ID» для всего? Может быть, DIM это за пределами цикла, а затем установить значение внутри цикла? –

+0

@ WayneG.Dunn благодарит за помощь, но мне удалось ее исправить – Jayy

ответ

2

Обновляет первую строку только потому, что набор параметров объекта команды не был очищен. Попробуйте сделать следующее:

With sqlcommand 
    .CommandText = sqlquery 

    .Parameters.Clear() '<─────── Insert this line in your code. 

    .Parameters.AddWithValue("@Attendance", newrow.Item(1)) 
    .Parameters.AddWithValue("@ID", newrow.Item(0)) 
    .Connection = Connection 
    MessageBox.Show(newrow.Item(1) & newrow.Item(0)) 
    .ExecuteNonQuery() 
End With 
Смежные вопросы