无法使用vb.net将数据插入Mysql

时间:2015-11-30 16:29:12

标签: mysql .net vb.net

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

enter image description here

当我使用这些文本框插入数据时,数据会被添加,但我不想将文本输入到文本框中,而是直接按下按钮(更新)直接添加基础信息。它给出了一个语法错误来检查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

2 个答案:

答案 0 :(得分:1)

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

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

说,检查数据库表是否有字段eid和Age of type 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

答案 1 :(得分: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查询的数据的习惯也非常重要。你所拥有的东西还不容易受到攻击,但它并没有让人相信它很快就不会受到攻击。