簡體   English   中英

更新Datagrid中除ID外的所有數據列(MySQL數據庫VB.NET)

[英]Update all data in columns in Datagrid except ID (MySQL Database VB.NET)

這是我程序的功能。 這是一個患者管理系統,該系統具有添加,刪除和更新的功能,但是我編碼了一個自動生成隨機密鑰,它將創建隨機密鑰,我在Mysql database ID列上未選中主鍵,數據類型為INT ,因此程序將在添加記錄時自動生成隨機IDs ,而不是MySql數據庫自動生成ID(按數字順序)。 問題是,當我單擊“更新”按鈕時,它表明我的語法不正確,有時會顯示“鍵PRIMARY的重復輸入鍵'xxxxx'” ,這意味着它已重復或替換或再次保存了ID。 我的問題是

如何在不更改或影響ID鍵的情況下更新列中的所有記錄?

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click

    MySqlConn = New MySqlConnection
    MySqlConn = New MySqlConnection("server=localhost;user id=root;password=root;database=PatientManagementSystem;")
    MySqlConn.Open()

    Dim cmd As MySqlCommand = MySqlConn.CreateCommand

    cmd.CommandText = String.Format("UPDATE newpatient SET " &
                                    "ID='{0}', " &
                                    "Lastname='{1}', " &
                                    "Firstname= '{2}', " &
                                    "Middlename= '{3}', " &
                                    "Age= '{4}', " &
                                    "Gender= '{5}', " &
                                    "Address= '{6}', " &
                                    "Occupation= '{7}', " &
                                    "Month= '{8}', " &
                                    "Day= '{9}', " &
                                    "Year= '{10}'",
                                    txtID.Text,
                                    txtFirstname.Text,
                                    txtFirstname.Text,
                                    txtMiddlename.Text,
                                    txtAge.Text,
                                    cmbGender.SelectedItem,
                                    txtAddress.Text,
                                    txtOccupation.Text,
                                    cmbMonth.SelectedItem,
                                    cmbDay.SelectedItem,
                                    cmbYear.SelectedItem)
    Dim affectedRows As Integer = cmd.ExecuteNonQuery

    If affectedRows > 0 Then

        MsgBox("Record successfully updated!", MsgBoxStyle.Information, "Success")
    Else
        MsgBox("Updating record failed.", MsgBoxStyle.Critical, "Failed")

    End If
    MySqlConn.Close()
 End Sub

 Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click

    'AUTO GENERATE RANDOM IDs
    Dim random As New Random
    Dim id As Integer
    id = (random.Next(100000000, 1000000000))
    txtID.Text = id

    MySqlConn = New MySqlConnection
    MySqlConn = New MySqlConnection("server=localhost;user id=root;password=root;database=PatientManagementSystem;")
    MySqlConn.Open()

    Dim cmd As MySqlCommand = MySqlConn.CreateCommand
    cmd.CommandText = String.Format("INSERT INTO newpatient (ID, Lastname, Firstname, Middlename, Age, Gender, Address, Occupation, Month, Day, Year )" &
                                    "VALUES ('{0}' , '{1}' ,'{2}' ,'{3}' ,'{4}' ,'{5}' , '{6}', '{7}', '{8}', '{9}', '{10}' )",
                                    txtID.Text,
                                    txtLastname.Text,
                                    txtFirstname.Text,
                                    txtMiddlename.Text,
                                    txtAge.Text,
                                    cmbGender.SelectedItem,
                                    txtAddress.Text,
                                    txtOccupation.Text,
                                    cmbMonth.SelectedItem,
                                    cmbDay.SelectedItem,
                                    cmbYear.SelectedItem)
    Dim affectedrows As Integer = cmd.ExecuteNonQuery()
    If affectedrows > 0 Then
        MsgBox("Record successfully saved!", MsgBoxStyle.Information, "Success")
        Dim adapter As New MySqlDataAdapter
        Dim DataSet As New DataTable
        Dim binding As New BindingSource

        'REFRESH DATAGRID
        Try
            frmOld_Patient.Show()
            Dim query As String
            Dim cmd1 As MySqlCommand
            query = "SELECT * FROM PatientManagementSystem.newpatient"
            cmd1 = New MySqlCommand(query, MySqlConn)
            adapter.SelectCommand = cmd1
            adapter.Fill(DataSet)
            binding.DataSource = DataSet
            frmOld_Patient.dgvRecords.DataSource = binding
            adapter.Update(DataSet)
            MySqlConn.Close()
            frmOld_Patient.Select()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            MySqlConn.Dispose()
        End Try
    Else
        MsgBox("Saving record failed.", MsgBoxStyle.Critical, "Failed")
    End If
    MySqlConn.Close()

End Sub

您的Update statement沒有Where條件”,因此它將使用相同的ID更新表中的所有行,從而說明為什么會出現該錯誤

編輯:只需將WHERE添加到您的更新語句中,就像這樣

cmd.CommandText = String.Format("UPDATE newpatient SET " &
                                "ID='{0}', " &
                                "Lastname='{1}', " &
                                "Firstname= '{2}', " &
                                "Middlename= '{3}', " &
                                "Age= '{4}', " &
                                "Gender= '{5}', " &
                                "Address= '{6}', " &
                                "Occupation= '{7}', " &
                                "Month= '{8}', " &
                                "Day= '{9}', " &
                                "Year= '{10}'" &
                                "WHERE ID={11}, ' here we add where
                                txtID.Text,
                                txtFirstname.Text,
                                txtFirstname.Text,
                                txtMiddlename.Text,
                                txtAge.Text,
                                cmbGender.SelectedItem,
                                txtAddress.Text,
                                txtOccupation.Text,
                                cmbMonth.SelectedItem,
                                cmbDay.SelectedItem,
                                cmbYear.SelectedItem,
                                yourID)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM