将Mysql数据库与vb.net GUI GridDataView同步

时间:2014-09-11 07:51:29

标签: mysql vb.net sync

我正在尝试连接在线MySQL数据库以同步显示在VB.NET表单中。我使用计时器在5秒后自动更新DatagridView,但这会使App变得非常糟糕和缓慢。

是否有任何方法可以在数据库更新时制作触发器或类似内容来更新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

1 个答案:

答案 0 :(得分:0)

您可以将本教程用于背景工作者,在您的情况下可能更好,background worker tutorial

如果您有任何问题,请告诉我,我很乐意为您提供帮助。

问候。