2014-09-11 78 views
0

我想连接在线MySQL数据库以同步显示在VB.NET窗体中。我使用计时器在5秒钟后自动更新DatagridView,但这会使应用程序变得非常糟糕和缓慢。同步Mysql数据库与vb.net图形用户界面GridDataView

是否有任何方法可以使触发器或类似的东西更新DataGridView只有当数据库得到更新?

这是我当前的代码:

Imports MySql.Data.MySqlClient 

Public Class Main 
    Dim sqlcon As MySqlConnection 
    Dim sqlcom As MySqlCommand 
    Public Function UpdateAppointment() 
     sqlcon = New MySqlConnection 
     sqlcom = New MySqlCommand 
     sqlcon.ConnectionString = "server=******;user id=******;password=*****;database=*****" 
     Dim SDA As New MySqlDataAdapter 
     Dim dbDataset As New DataTable 
     Dim bSource As New BindingSource 

     Dim query As String = " SELECT Name,Program,level,dayT, fromT , toT, why, status from student JOIN appointment ON appointment.userid=student.id join FreeTime on appointment.freetimeid=FreeTime.stuffid where appointment.stuffid='" & LogIn.id & "' " 
     If LogIn.CheckForInternetConnection() Then 
      Try 
       sqlcon.Open() 

       sqlcom = New MySqlCommand(query, sqlcon) 

       SDA.SelectCommand = sqlcom 
       SDA.FillAsync(dbDataset) 
       bSource.DataSource = dbDataset 
       DataGridView1.DataSource = bSource 
       SDA.UpdateAsync(dbDataset) 
       Me.DataGridView1.FirstDisplayedScrollingRowIndex = Me.DataGridView1.RowCount - 1 

       TSlableConnection.Text = "Connected to the Database" 
       TSlableConnection.BackColor = Color.Green 
       sqlcon.Close() 

      Catch ex As MySqlException 
       TSlableConnection.Text = "Cannot connect to database: " & ex.Message 
       TSlableConnection.BackColor = Color.Red 
      Finally 

       sqlcon.Dispose() 
      End Try 
     End If 
     Return DBNull.Value 
    End Function 

    Private Sub ButtonAccept_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAccept.Click 

    End Sub 


    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     TextBoxName.Text = LogIn.SName 
     TextBoxTitle.Text = LogIn.Title 
     TextBoxStatus.Text = LogIn.Status 
     TextBoxRoom.Text = LogIn.RoomNum 
     TextBoxDepartment.Text = LogIn.Department 
     TextBoxPhone.Text = LogIn.PhoneNum 
     UpdateAppointment() 
    End Sub 

    Private Sub ToolStripLabel1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 

Handles ToolStripLabel1.Click 
     Try 
      Dim updater As MySqlDataReader 
      Dim Query2 As String = "UPDATE stuff SET Connection=0 WHERE id='" & LogIn.id & "'" 

      LogIn.MysqlCon.Open() 
      LogIn.com2 = New MySqlCommand(Query2, LogIn.MysqlCon) 
      updater = LogIn.com2.ExecuteReader 

      LogIn.MysqlCon.Close() 

     Catch ex As MySqlException 

     Finally 

      LogIn.MysqlCon.Dispose() 
     End Try 
     Me.Hide() 
     LogIn.Show() 

    End Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Try 
     Dim updater As MySqlDataReader 
     Dim Query2 As String = "UPDATE `stuff` SET `RoomNo`='" & TextBoxRoom.Text & "',`Status`='" & TextBoxStatus.Text & "',`Phone`='" & Val(TextBoxPhone.Text) & "' WHERE id='" & LogIn.id & "'" 

     LogIn.MysqlCon.Open() 
     LogIn.com2 = New MySqlCommand(Query2, LogIn.MysqlCon) 
     updater = LogIn.com2.ExecuteReader 
     MsgBox("The data has been updated..") 
     LogIn.MysqlCon.Close() 

    Catch ex As MySqlException 
     MsgBox("Cannot connect to database: " & ex.Message) 
    Finally 

     LogIn.MysqlCon.Dispose() 
     End Try 
    End Sub 

    Private Sub DataGridView2_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView2.CellContentClick 

    End Sub 

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
     UpdateAppointment() 
    End Sub 
End Class 

回答

0

您可以使用此教程,这可能是你的情况更好的后台工作,background worker tutorial

让我知道如果你有任何问题,我会乐意效劳。

关于。