2014-11-14 2 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 
관련 문제