使用参数将数据插入MySQL数据库

时间:2017-05-13 11:48:17

标签: mysql vb.net

最近我开发了一些将数据插入MySQL的软件,但有人告诉我应该使用参数。我用谷歌搜索了他们,但没有找到任何数据。

这是我的代码:

Dim Query As String
Query = "insert into baza.artikli(kod,naziv,nabavna,prodazna,ddv,kolicina,opis,opis2,mkproizvod,profit,proizvoditel) values ('" & TextBoxBarkod.Text & "','" & TextBoxNaziv.Text & "','" & kupovnacena & "','" & prodaznacena & "','" & ddv & "','" & kolicina & "','" & TextBoxOpis.Text & "','" & TextBoxOpis2.Text & "','" & mkpr & "','" & profit & "','" & TextBoxProizvoditel.Text & "')"
COMMAND = New MySqlCommand(Query, konekcija)
READER = COMMAND.ExecuteReader

4 个答案:

答案 0 :(得分:1)

预防注射

这是一个例子

Dim query As String

query = "INSERT INTO Users (user_name) VALUES(?);"
cmd = New MySqlCommand(query, con)
cmd.Parameters.AddWithValue("?", Me.User_nameTextBox.Text)
//Execute your command......

答案 1 :(得分:0)

答案 2 :(得分:0)

我强烈建议您使用SQL参数。这是为了减少语法问题,但更重要的是停止SQL注入。有关详细信息,请参阅Bobby Tables

我还注意到您正在使用ExecuteReader。这通常用于select语句。对于插入和更新,您应该使用ExecuteNonQuery。有关详细信息,请查看documentation

如果您还没有,我还建议您实施Using

  

有时,您的代码需要非托管资源,例如文件句柄,COM包装器或SQL连接。使用块可确保在代码完成后处理一个或多个此类资源。这使得它们可供其他代码使用。

通过这些更改,您的代码将如下所示:

Using con As New MySqlConnection(yourConnectionString),
      cmd As New MySqlCommand("INSERT INTO baza.artikli (kod, naziv, nabavna, prodazna, ddv, kolicina, opis, opis2, mkproizvod, profit, proizvoditel) VALUES (@kod, @naziv, @nabavna, @prodazna, @ddv, @kolicina, @opis, @opis2, @mkproizvod, @profit, @proizvoditel)", con)

    con.Open()

    cmd.Parameters.Add("@kod", MySqlDbType.[Type]).Value = TextBoxBarkod.Text
    cmd.Parameters.Add("@naziv", MySqlDbType.[Type]).Value = TextBoxNaziv.Text
    cmd.Parameters.Add("@nabavna", MySqlDbType.[Type]).Value = kupovnacena
    cmd.Parameters.Add("@prodazna", MySqlDbType.[Type]).Value = prodaznacena
    cmd.Parameters.Add("@ddv", MySqlDbType.[Type]).Value = ddv
    cmd.Parameters.Add("@kolicina", MySqlDbType.[Type]).Value = kolicina
    cmd.Parameters.Add("@opis", MySqlDbType.[Type]).Value = TextBoxOpis.Text
    cmd.Parameters.Add("@opis2", MySqlDbType.[Type]).Value = TextBoxOpis2.Text
    cmd.Parameters.Add("@mkproizvod", MySqlDbType.[Type]).Value = mkpr
    cmd.Parameters.Add("@profit", MySqlDbType.[Type]).Value = profit
    cmd.Parameters.Add("@proizvoditel", MySqlDbType.[Type]).Value = TextBoxProizvoditel.Text

    cmd.ExecuteNonQuery()

End Using
  

请注意,我使用了MySqlDbType.[Type]。您需要将[Type]替换为您在数据库中使用的数据类型。

答案 3 :(得分:-1)

首先回答你的问题: 设置

TextBoxBarkod.Text = "(select password from mysql.user where user=’root’)"

或换句话说:在网上搜索SQL-injection

有关如何使用参数的示例,请参阅例如this post