繁体   English   中英

如何将 DateTimePicker 和 ComboBoxes 添加到 mysql 数据库,然后将其显示到 DataGridView

[英]how can i add a DateTimePicker and ComboBoxes to mysql database then displaying it to DataGridView

形式

Sub ViewRecords()
        Try
        read("SELECT * FROM reservation", DataGridView1)
    Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

Private Sub add_Click(sender As Object, e As EventArgs) Handles add.Click
        Try
            ComboTIME = (hr.SelectedItem.ToString + ":" + min.SelectedItem.ToString + " " + fr.SelectedItem.ToString)
            write("INSERT INTO reservation (ReservationCode, UserId, RestaurantName, RestaurantLocation, Time, Date, ReservationStatus, Remarks) VALUES ('" & code.Text & "','" & userid.Text & "','" & restoname.Text & "', '" & restolocation.Text & "', '" & datepicker.Value & "', '" & ComboTIME & "', '" & ans & "', '" & remarks.Text & "')")
            code.Clear()
            userid.Clear()
            restoname.Clear()
            restolocation.Clear()
            datepicker.ResetText()
            hr.ResetText()
            min.ResetText()
            fr.ResetText()
            y.ResetText()
            n.ResetText()
            remarks.Clear()
            ViewRecords()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

模块连接

 Public Sub read(ByVal sql As String, ByVal DTG As Object)
    Try
        dt = New DataTable
        con.Open()
        With cmd
            .Connection = con
            .CommandText = sql
        End With
        da.SelectCommand = cmd
        da.Fill(dt)
        DTG.DataSource = dt
    Catch ex As Exception
        MessageBox.Show(ex.Message & ex.Source, "Load Data Failed")
        con.Close()
    End Try
    con.Close()
    da.Dispose()
End Sub

Public Sub write(ByVal sql As String)

        Try
            con.Open()
            With cmd
                .Connection = con
                .CommandText = sql
                result = cmd.ExecuteNonQuery
                If result = 0 Then
                    MessageBox.Show("FAILED.")
                Else
                    MessageBox.Show("SUCCESS.")
                End If
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
        con.Close()
    End Sub

我的程序中唯一的问题是,当我单击按钮时,我绑定并声明为 ComboTIME 的日期时间选择器和组合框不会记录在数据库和 datagridview 中,我与数据库的连接很好,文本框是可存储和可显示的在数据库和datagridview中,有人可以帮我解决这个问题吗?

始终提供可访问性修饰符以使您的代码更清晰易读。 当您开始在多种环境中使用多种语言时,可能很难记住默认的可访问性在 vb.net 中。

将数据访问代码与用户界面代码分开。 例如,您将 DataGridView 传递给您的模块代码。 假设老板说他真的想要一个 web 应用程序。 现在,您不仅需要修复用户界面代码,还需要修改模块。 将它们分开只需要更改 UI 代码。 我的DataAccess class 保持不变。

Using...End Using块确保即使出现错误,您的数据库对象也已关闭和处置。

Parameters有助于防止 sql 注入。 用户可以在文本框中输入任何内容,包括“Delete * From reservation” Parameters只提供值而不是可执行代码,因此它们不会损坏数据库。 我不得不猜测SqlDbType因此,您需要检查数据库的正确类型。

用户界面代码...

Private Sub ViewRecords()
    Dim dt As DataTable = Nothing
    Try
        dt = DataAccess.GetReservationData
    Catch ex As Exception
        MsgBox($"Failed to fill grid {ex.Message}")
        Return
    End Try
    DataGridView1.DataSource = dt
End Sub
Private ans As String = ""

    Private Sub InsertReservation()
    Dim code As Integer
    If Not Integer.TryParse(code.Text, code) Then
        MessageBox.Show("Code needs to be a number.")
        Return
    End If
    Dim userID As Integer
    If Not Integer.TryParse(userid.Text, userID) Then
        MessageBox.Show("User ID needs to be a number.")
        Return
    End If
    Try
        DataAccess.InsertReservation(code, userID, restoname.Text, restolocation.Text, ComboTIME.Text, datepicker.Value, ans, remarks.Text)
    Catch ex As Exception
            MessageBox.Show($"Insert Failed {ex.Message}")
            Return
        End Try
        MessageBox.Show("Reservation inserted successfully.")
End Sub

数据库代码...

Public Class DataAccess

    Private Shared ConStr As String = "Your connection string"

    Public Shared Function GetReservationData() As DataTable
        Dim dt As New DataTable
        Using con As New MySqlConnection(ConStr),
                cmd As New MySqlCommand("SELECT * FROM reservation", con)
            con.Open()
            Using reader = cmd.ExecuteReader
                dt.Load(reader)
            End Using
        End Using
        Return dt
    End Function

    Public Shared Sub InsertReservation(ReservationCode As Integer, UserID As Integer, RestaurantName As String, Location As String, Time As String, ResDate As Date, Status As String, Remarks As String)
        Using con As New MySqlConnection(ConStr),
                cmd As New MySqlCommand("INSERT INTO reservation (ReservationCode, UserId, RestaurantName, RestaurantLocation, Time, Date, ReservationStatus, Remarks) VALUES (@ResurvationCode, @UserID, @RestaurantName, @Location, @Time, @Date, @Status, @Remarks)", con)
            With cmd.Parameters
                .Add("@ReservationCode", MySqlDbType.Int32).Value = ReservationCode
                .Add("@UserID", MySqlDbType.Int32).Value = UserID
                .Add("@RestaurantName", MySqlDbType.VarChar).Value = RestaurantName
                .Add("@Location", MySqlDbType.VarChar).Value = Location
                .Add("@Time", MySqlDbType.VarChar).Value = Time
                .Add("@Date", MySqlDbType.DateTime).Value = ResDate
                .Add("@Status", MySqlDbType.VarChar).Value = Status
                .Add("@Remarks", MySqlDbType.VarChar).Value = Remarks
            End With
        End Using
    End Sub

End Class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM