2016-01-11 21 views
1

我在vb.net中使用MySQL Datagridview正確顯示並且一切正常,當我嘗試使用更新(方法)更新數據庫中的更改時出現問題, 默認情況下,數據在內存中更新「被刪除的學生與ID =」2「」 但在數據庫中沒有更新,我正在閱讀文檔,並應與更新 datosAlumnos.Update(ds,「alumnos 「)Mysql DataAdapter更新方法 - 不保存更改

Imports MySql.Data.MySqlClient 
    Public Class Form1 
     Dim con As New MySqlConnection 
     Dim stringCon As String = "server=localhost; user id=root; password=; database=centroeducativo" 
     Dim listViewAlumnos As New ListBox() 

     Dim ds As New DataSet() 
     Private Sub Form1_Load(ByVal sender As Object, _ 
     ByVal e As System.EventArgs) Handles MyBase.Load 
      Try 
       con.ConnectionString = stringCon 
       con.Open() 
       Dim datosTablas As New MySqlDataAdapter("SHOW TABLES", con) 
       Dim datosAlumnos As New MySqlDataAdapter("SELECT * FROM alumnos ORDER BY Nombre", con) 
       Dim datosAsignaturas As New MySqlDataAdapter("SELECT * FROM asignaturas", con) 
       Dim datosMatriculas As New MySqlDataAdapter("SELECT * FROM matriculas", con) 

       datosTablas.Fill(ds, "tablas") 
       datosAlumnos.Fill(ds, "alumnos") 
       datosAsignaturas.Fill(ds, "asignaturas") 
       datosMatriculas.Fill(ds, "matriculas") 

       con.Close() 

       Dim tabla As DataTable 
       tabla = ds.Tables("tablas") 
       Dim fila As DataRow 
       Me.ListBox1.Items.Clear() 
       For Each fila In tabla.Rows 

        Me.ListBox1.Items.Add(fila.Item("Tables_in_centroeducativo")) 
       Next 
       Dim filaBorrada As DataRow() = ds.Tables("alumnos").Select("id=2") 
       filaBorrada(0).Delete() 
       datosAlumnos.Update(ds, "alumnos") 
      Catch ex As Exception 

      End Try 
     End Sub 


    Private Sub formularioTabla(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged 
     Dim curItem As String = ListBox1.SelectedItem.ToString() 
     Select Case curItem 
      Case "alumnos" 
       FormularioAlumno() 
      Case "asignaturas" 
       FormularioAsignaturas() 
      Case "matriculas" 
       FormularioMatriculas() 
      Case Else 
       MsgBox("none") 
     End Select 
    End Sub 

    Private Sub FormularioAlumno() 
     Panel1.Controls.Clear() 
     Dim dv As DataView = ds.Tables("alumnos").DefaultView 
     con.Close() 
     Dim DataGridView As New DataGridView() 
     Panel1.Controls.Add(DataGridView) 
     DataGridView.AutoSize = True 
     DataGridView.DataSource = dv 
     DataGridView.Columns("id").Visible = False 
    End Sub 
End Class 
+0

如果有一個錯誤,你永遠不會知道,因爲那個空白的Catch只是吞下它們。你最好把它移動到一個按鈕點擊,至少調試它 – Plutonix

+0

插入/更新/刪除命令在哪裏?或者一個命令生成器? –

+0

你可能會想念我:CommandBuilder to mysql? – Cazs

回答

2

看來你忘記設置​​,UpdateCommand,特別是Deletecommand

要使數據適配器更新數據,它應該有這些命令。您可以手動設置這些命令或使用MySqlCommandBuilder

Dim myConn As New MySqlConnection("Connection String") 
Dim myDataAdapter As New MySqlDataAdapter() 
myDataAdapter.SelectCommand = New MySqlCommand("Select Query", myConn) 
Dim myCommandBuilder As MySqlCommandBuilder = New MySqlCommandBuilder(myDataAdapter) 
+0

如果看起來是這樣,但不太明白它是如何工作的,因爲它只聲明一次而不回調? – Cazs

+0

使用DataAdapter創建命令生成器時,它會使用select語句爲數據適配器創建插入/更新/刪除命令。爲了使數據適配器更新數據,它應該有這些命令。 –

+0

謝謝,查詢,可以在公共層面作出證明「Dim As New MySqlDataAdapter datosAlumnos」作出保存按鈕,你可以訪問它? – Cazs