【问题标题】:Could not insert the data using vb.net into Mysql无法使用 vb.net 将数据插入 Mysql
【发布时间】:2015-11-30 16:29:12
【问题描述】:

我正在尝试使用 VB 将数据插入 MySQL。

当我使用这些文本框插入数据时,数据会被添加,但我不想将文本输入文本框,而是直接通过按下按钮(更新)来添加基础信息。检查 MySQL 版本时出现语法错误。它是查询错误吗?我不知道该怎么做。请帮忙。这是我的代码。

 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Mysqlconn = New MySqlConnection

        Mysqlconn.ConnectionString = "server=localhost;userid=root;port=85;password=*****;database=data"
        Dim reader As MySqlDataReader


        Try
            Mysqlconn.Open()
            Dim query As String
            query = "INSERT INTO 'data'.'etable'('eid','Name','Surname','Age')values('7','Andy','Roddick','35')"
            command = New MySqlCommand(query, Mysqlconn)
            reader = command.ExecuteReader


            MessageBox.Show("Data Saved")

            Mysqlconn.Close()

        Catch ex As MySqlException
            MessageBox.Show(ex.Message)
            Mysqlconn.Dispose()

        End Try

    End Sub
End Class

【问题讨论】:

  • 为什么不在编译语言中包含“运行代码 sn-p”?你没发现它不起作用吗?

标签: mysql .net vb.net


【解决方案1】:

试试这个,它也修复了一些其他问题和潜在问题:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

    Dim query As String = "INSERT INTO `data`.`etable`(eid,Name,Surname,Age)" & _
                         " VALUES (@eid, @Name, @Surname, @Age)"
    Using con As New MySqlConnection("server=localhost;userid=DONT_USE_ROOT!;port=85;password=*****;database=data"), _
          cmd As New MySqlCommand(query, con)

        'Guessing at parameter types/lengths here.
        cmd.Parameters.Add("@eid", MySqlDbType.Int32).Value = 7
        cmd.Parameters.Add("@Name", MySqlDbType.VarChar, 20).Value = "Andy"
        cmd.Parameters.Add("@Surname", MySqlDbType.VarChar, 25).Value =  "Roddick"
        cmd.Parameters.Add("@Age", MySqlDbType.Int32).Value = 35

        conn.Open()
        If cmd.ExecuteNonQuery() > 0 Then MessageBox.Show("Data Saved")

    End Using   
End Sub

请注意,我还删除了异常处理程序。现在不再需要旧处理程序中的 Dispose() 调用(Using 块负责处理此问题),我倾向于提倡在比引发异常的位置更高的级别处理异常......尽管在这种情况下你'已经在按钮事件中。我在这里真正推荐的是将数据库代码移动到它自己的类中,所以这将在该类中的一个单独的方法中。然后你仍然可以在按钮单击事件中使用异常处理程序,Try 块中唯一的事情就是调用该方法。

对于进入sql查询的数据,养成使用查询参数的习惯也很重要,以防止sql注入攻击。你所拥有的东西还不容易受到攻击,但它没有任何信心相信它不会很快受到攻击。

【讨论】:

  • 嘿乔尔在这种情况下,如果我应该在数据库中添加所有员工的所有年龄,然后通过消息框或文本框在 VB 中显示它,那么我必须做哪些更改(通过点击按钮)
【解决方案2】:

包含表名和字段名的正确字符是反引号而不是单引号。使用数字小键盘上的 ALT+096 将其插入。

 query = "INSERT INTO  `data`.`etable`(`eid`,`Name`,`Surname`,`Age`) "  & _
         "values('7','Andy','Roddick','35')"

也就是说,检查你的数据库表是否有字段 eid 和年龄类型为varchar。如果字段是数字(顾名思义),那么您的查询应该更改为

 query = "INSERT INTO  `data`.`etable`(`eid`,`Name`,`Surname`,`Age`) "  & _
         "values(7,'Andy','Roddick',35)"

您的代码还包含一些需要删除以避免将来出现问题的不良做法

 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

     Dim query As String
     query = "INSERT INTO  `data`.`etable`(`eid`,`Name`,`Surname`,`Age`) "  & _
             "values(7,'Andy','Roddick',35)"
     Using Mysqlconn = New MySqlConnection
     Using command = New MySqlCommand(query, Mysqlconn)
        Mysqlconn.ConnectionString = "server=localhost;userid=root;port=85;password=*****;database=data"
        Try
            Mysqlconn.Open()
            Dim rowsAffected = command.ExecuteNonQuery()
            if rowsAffected > 0 Then 
               MessageBox.Show("Data Saved")
            End If
        Catch ex As MySqlException
            MessageBox.Show(ex.Message)
        End Try
    End Using
    End Using
End Sub

首先将所有一次性对象包含在 Using 语句中,以确保它们在异常情况下也已关闭和处置,然后不要将 ExecuteReader 用于 INSERT、UPDATE 和 DELETE 查询,而正确使用的方法是 ExecuteNonQuery

【讨论】:

  • 真的非常感谢,实际上我是这个数据库的新手,我正在学习 Vb,因为我必须使用 gambas3 进行应用程序开发。不过,这是一个愚蠢的错误(单引号)......谢谢和它奏效了。
  • 另请参阅其他答案。在您的情况下,您使用常量,因此可以将它们直接写入命令文本字符串中。如果您有要传递的用户输入,请记住按照那里的说明使用 always 参数
  • 嘿,史蒂夫,在这种情况下,如果我应该在数据库中添加所有员工的所有年龄,然后通过消息框或文本框在 VB 中显示它,那么我必须做哪些更改(通过点击按钮)
  • 很抱歉,对此我无能为力。从来没有使用过。对于第二个问题,我建议发布一个新问题。与在已回答的问题中发表评论相比,您将获得更多关注。
  • Hey steve....我提出了一个新问题,上面写着==>“我想在 mysql 中添加列字段,然后将结果发送到 VB 以显示它”。请检查一下如果您有任何解决方案,请告诉我.....谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多