【问题标题】:Update query makes the fields empty in the database更新查询使数据库中的字段为空
【发布时间】:2015-09-10 11:07:43
【问题描述】:

我之前问过一个关于使用 phpMyAdmin 在 datagridview 中更新数据的问题。您可以通过以下链接参考它-->Updating data in phpmyadmin part 1

代码运行良好,但现在的问题是,当我在 localhost 中检查更新的数据时,我看到的都是空字段。下面是我设计的vb的截图。我已经根据我的数据库标记了文本框。屏幕截图中的文本框设置为在运行我的 winform 时不可见。

究竟可能是什么问题?


@卡卡罗特 这是我最初拥有的

MysqlConn = 新的 MySqlConnection MysqlConn.ConnectionString = "服务器=本地主机;用户ID=服务器;密码=服务器;数据库=heavisa_database" Dim rabit As MySqlDataReader

    MysqlConn.Open()

    Dim pin As String
    pin = "UPDATE heavisa_database.new_employee SET (Employee_ID = '" & txtemployeeid.Text & "', Nat_ID = '" & txtnatid.Text & "', First_Name = '" & txtfirstname.Text & "', Middle_Name = '" & txtmiddlename.Text & "', Surname = '" & txtsurname.Text & "', NSSF_No = '" & txtnssfno.Text & "', KRA_Pin = '" & txtkrapin.Text & "', NHIF_No = '" & txtnhifno.Text & "', Residence = '" & txtresidence.Text & "', Mobile_No = '" & txtmobileno.Text & "', Email = '" & txtemail.Text & "', Job_Group = '" & cbojobgroup.Text & "', Employment_Date = '" & dtpemploymentdate.Text & "') WHERE Employee_ID = '" & txtemployeeid1.Text & "'"

    Try
        con = New MySqlCommand(pin, MysqlConn)
        rabit = con.ExecuteReader

        MessageBox.Show("Update Successful.")
        MysqlConn.Close()

    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    Finally
        MysqlConn.Dispose()

    End Try

这是我目前拥有的(归功于一位 ekad 先生)

将针脚变暗为字符串 pin = "UPDATE heavisa_database.new_employee SET Employee_ID = @Employee_ID, Nat_ID = @Nat_ID, First_Name = @First_Name, Middle_Name = @Middle_Name, Surname = @Surname, NSSF_No = @NSSF_No, KRA_Pin = @KRA_Pin, NHIF_No = @NHIF_No, Residence = @Residence,Mobile_No = @Mobile_No,Email = @Email,Job_Group = @Job_Group,Employment_Date = @Employment_Date WHERE Employee_ID like '%{0}%'"

    Try
        Using MysqlConn As New MySqlConnection
            MysqlConn.ConnectionString = "server=localhost;userid=server;password=server;database=heavisa_database"

            MysqlConn.Open()

            Using con As New MySqlCommand(pin, MysqlConn)

                With con
                    con.Parameters.AddWithValue("@Employee_ID", txtemployeeid.Text)
                    con.Parameters.AddWithValue("@Nat_ID", txtnatid.Text)
                    con.Parameters.AddWithValue("@First_Name", txtfirstname.Text)
                    con.Parameters.AddWithValue("@Middle_Name", txtmiddlename.Text)
                    con.Parameters.AddWithValue("@Surname", txtsurname.Text)
                    con.Parameters.AddWithValue("@NSSF_No", txtnssfno.Text)
                    con.Parameters.AddWithValue("@KRA_Pin", txtkrapin.Text)
                    con.Parameters.AddWithValue("@NHIF_No", txtnhifno.Text)
                    con.Parameters.AddWithValue("@Residence", txtresidence.Text)
                    con.Parameters.AddWithValue("@Mobile_No", txtmobileno.Text)
                    con.Parameters.AddWithValue("@Email", txtemail.Text)
                    con.Parameters.AddWithValue("@Job_Group", cbojobgroup.Text)
                    con.Parameters.AddWithValue("@Employment_Date", dtpemploymentdate.Text)
                End With

                con.ExecuteNonQuery()
            End Using

        End Using

        MessageBox.Show("Update Successful.")
        MysqlConn.Close()

    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    End Try

第一个代码给了我一个错误(请参阅上面的链接)。第二个代码有效,但它清空了我的字段而不是更新。

【问题讨论】:

  • 如何将数据准确绑定到datagridview?
  • 绑定到mysqladmin中的数据库?你是这个意思吗?如果是这样,那么我认为我没有这样做,我也不知道该怎么做。
  • 这里为什么需要datagridview?如果您只想输入这些文本框并使用输入的员工 ID 更新记录,我认为您不需要 datagridview。您可以将这些文本框放在 datagridview 之外并删除 datagridview。
  • 这个想法是在该数据网格视图中显示所有员工的姓名。这就是我选择它的原因。
  • 一旦我这样做了,我就可以对记录进行更改并将其更新到我的数据库中

标签: vb.net winforms datagridview phpmyadmin


【解决方案1】:

您是如何更新数据库中的表的?它应该是这样的: (我要把我的代码用于我做的一个旧项目)

Private Sub disconnect()
    conn.Close()
End Sub

Private Sub connect()
    conn.ConnectionString = connectionString
    conn.Open()
End Sub

Private Sub btnSaveEdit_Click(sender As Object, e As EventArgs) Handles btnSaveEdit.Click

connect()
Dim query as string
Dim command As New MySqlCommand

query = "Update `tblcandidates` set firstname = '" & txtEditFname.Text & "', lastname = '" & txtEditLName.Text & "', position='" & cboEditPosition.Text & "', fullname = '" & fullname & "' where recNum = '" & txtRec.Text & "'"



command.Connection = conn
command.CommandText = query

command.ExecuteNonQuery()

disconnect()
End Sub

【讨论】:

  • 如果这段代码是your new answer的灵感,那么这个答案根本解决不了问题。 MartinBaraza 在问题评论中说:这个想法是在那个 datagridview 中显示所有员工的姓名。,所以如果你真的想回答这个问题,那么试着帮助@MartinBaraza 了解如何将数据绑定到首先是datagridview。
  • @ekad,伙计,他在这篇文章中问的是为什么他的数据没有显示在数据库中。不在 datagrid 视图上。那是在他的另一篇文章中,不是在这里。
【解决方案2】:

首先,只是一个简单的问题,heavisa_database.new_employee 是一张桌子吗?正确命名它们是非常明智的,如果它是一个表,你可以把tbl放在你想要的名字之前,如果它是一个数据库,你可以把db放在名字之前。只是为了防止混淆。而且我认为您在更新表中的记录时不需要reader,如果我错了,请纠正我:p

好吧,老实说,我不太了解 ekad 先生提供的代码。这是您可以尝试的代码。哦,你真的不需要SET 后面的括号。

//Global Vars
Dim connectionString As String = "server=localhost;userid=server;password=server;database=heavisa_database"
Dim conn As New MySqlConnection

首先,让我们创建一些简单的函数(您可以将其放在代码中的任何位置):

//remember that conn is our MySqlConnection
Private Sub connect()
    conn.ConnectionString = connectionString
    conn.Open()
End Sub

Private Sub disconnect()
    conn.Close()
End Sub

所以,更新按钮的事件:

connect()

Dim pin As String
pin = "UPDATE new_employee SET Employee_ID = '" & txtemployeeid.Text & "', Nat_ID = '" & txtnatid.Text & "', First_Name = '" & txtfirstname.Text & "', Middle_Name = '" & txtmiddlename.Text & "', Surname = '" & txtsurname.Text & "', NSSF_No = '" & txtnssfno.Text & "', KRA_Pin = '" & txtkrapin.Text & "', NHIF_No = '" & txtnhifno.Text & "', Residence = '" & txtresidence.Text & "', Mobile_No = '" & txtmobileno.Text & "', Email = '" & txtemail.Text & "', Job_Group = '" & cbojobgroup.Text & "', Employment_Date = '" & dtpemploymentdate.Text & "' WHERE Employee_ID = '" & txtemployeeid1.Text & "'"

    //lets create new command
    Dim command As New MySqlCommand

    //sets the connection for our command
    command.Connection = conn
    command.CommandText = pin

    command.ExecuteNonQuery()

    disconnect()

    MessageBox.Show("Record saved!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)

试试上面给定的代码,我很确定它会起作用。祝你好运!

【讨论】:

  • 我已经按照你说的做了。代码也可以工作,但它又给我留下了空白字段:'(请参阅上面的评论以获取屏幕截图
  • 哦,heavisa_database 是数据库的名称。 new_employee 是表。我认为最好删除 heavisa_database 部分,因为它在代码中是不必要的
  • 那就是你的问题,伙计!只需输入UPDATE new_employee,不要包含数据库的名称。如果您使用我上面的代码,它会起作用,只需将pin 部分中的heavisa_database.new_employee 更改为new_employee
  • 您不再需要包含数据库的名称,因为我们已经在全局变量部分指定了要使用的数据库。告诉我它是否有效:p
  • 不幸的是仍然无法正常工作。但我认为阅读 WHERE Employee_ID = '" & txtemployeeid1.Text & "' 是一个小问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2010-11-20
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多