2014-02-04 7 views
2

Я извлекаю записи из базы данных со следующим кодом.Отправка обновлений из datagridview в существующую строку в базе данных

Dim SearchID As Integer = teacherID 
    Dim NewStudentID As Integer = studentID 
    Dim DisplayTable As New DataTable() 
    Dim da As New OleDbDataAdapter() 
    Dim sqlquery As String = ("select * from tblAppointments WHERE TeacherID =" & teacherID & "") 
    If conn.State = ConnectionState.Closed Then 
     conn.Open() 
    End If 
    Try 
     da.SelectCommand = New OleDbCommand(sqlquery, conn) 
     da.Fill(Finalds, "Display") 
     DisplayTable = Finalds.Tables("Display") 
     DisplayTable.Columns.Remove("Instrument") 
     DisplayTable.Columns.Remove("Room") 
     DisplayTable.Columns.Remove("TeacherID") 
     Registersgridview.DataSource = DisplayTable 
     Registersgridview.Columns(0).Visible = False 
     conn.Close() 
    Catch ex As Exception 
     MsgBox("There are no appointments in the database for " + Tutorcombox.Text) 
    End Try 

Это также добавлено в datagridview, и некоторые столбцы удалены, а некоторые также скрыты.

Поскольку он по существу является регистром, когда использование нажимает на поле datagridview, которое является логическим, оно изменяется с false на true. Я пытаюсь отправить это обратно в базу данных, но не повезло. Я пробовал следующее:

Dim dt As DataTable = New DataTable("SendTable") 
    Dim row As DataRow 
    dt.Columns.Add("appID", Type.GetType("System.Int32")) 
    dt.Columns.Add("Present", Type.GetType("System.Boolean")) 
    For i = 0 To Registersgridview.Rows.Count - 1 
     row = dt.Rows.Add 
     row.Item("appID") = Registersgridview.Rows(i).Cells(0) 
     row.Item("Present") = Registersgridview.Rows(i).Cells(5) 
    Next 
    If conn.State = ConnectionState.Closed Then 
     conn.Open() 
    End If 
    Dim sqlquery As String = "Update tblAppointments SET Present = @Present WHERE appID = @appID" 
    Dim sqlcommand As New OleDbCommand 
    For Each newrow As DataRow In dt.Rows 
     With sqlcommand 
      .CommandText = sqlquery 
      .Parameters.AddWithValue("@Present", newrow.Item(1)) 
      .Parameters.AddWithValue("@appID", newrow.Item(0)) 
      .ExecuteNonQuery() 
     End With 
     conn.Close() 
    Next 

Но не повезло с этим, так как он сбой без ошибок.

Может ли кто-нибудь помочь?

ответ

2

Я решил проблему сам, если любой из вас возникли подобные проблемы, вот решение

Dim dt As DataTable = New DataTable("SendTable") 
     Dim row As DataRow 
     dt.Columns.Add("appID", Type.GetType("System.Int32")) 
     dt.Columns.Add("Present", Type.GetType("System.Boolean")) 
     For i = 0 To Registersgridview.Rows.Count - 1 
      Dim appID As Integer = Registersgridview.Rows(i).Cells(0).Value 
      Dim present As Boolean = Registersgridview.Rows(i).Cells(4).Value 
      row = dt.Rows.Add 
      row.Item("appID") = appID 
      row.Item("Present") = present 
     Next 
     If conn.State = ConnectionState.Closed Then 
      conn.Open() 
     End If 
     Dim sqlquery As String = "UPDATE tblAppointments SET Present = @Present WHERE appID = @appID" 
     Dim sqlcommand As New OleDbCommand 
     For Each newrow As DataRow In dt.Rows 
      With sqlcommand 
       .CommandText = sqlquery 
       .Parameters.AddWithValue("@Present", newrow.Item(1)) 
       .Parameters.AddWithValue("@appID", newrow.Item(0)) 
       .Connection = conn 
       .ExecuteNonQuery() 
      End With 
     Next 
     conn.Close() 
     Registersgridview.DataSource = Nothing 
     dt.Clear() 
1
try this: 

    Dim dt As DataTable = New DataTable("SendTable") 
    Dim row As DataRow 
    dt.Columns.Add("appID", Type.GetType("System.Int32")) 
    dt.Columns.Add("Present", Type.GetType("System.Boolean")) 
    For i = 0 To Registersgridview.Rows.Count - 1 
     row = dt.Rows.Add 
     row.Item("appID") = Registersgridview.Rows(i).Cells(0) 
     row.Item("Present") = Registersgridview.Rows(i).Cells(5) 
    Next 
    If conn.State = ConnectionState.Closed Then 
     conn.Open() 
    End If 
    Dim sqlquery As String = "Update tblAppointments SET Present = @Present WHERE appID = @appID" 
    Dim sqlcommand As New OleDbCommand 
    For Each newrow As DataRow In dt.Rows 
     With sqlcommand 
      .CommandText = sqlquery 
      .Parameters.AddWithValue("@Present", newrow.Item(5)) 
      .Parameters.AddWithValue("@appID", newrow.Item(0)) 
      .ExecuteNonQuery() 
     End With 
     conn.Close() 
    Next 
Смежные вопросы