vb.net使用变量执行sql命令



当我运行并尝试使用此功能时,我想从windows窗体插入到表中,出现了一个异常,即

field"我写的字符串"字段列表中未知"指向"resultat=cmd.ExecuteNonQuery">

Sub maj()
Dim cnx As New MySqlConnection("datasource=localhost;database=bdgeststock;username=root;password=")
Dim cmd As MySqlCommand = cnx.CreateCommand
Dim resultat As Integer
If ConnectionState.Open Then
cnx.Close()
End If
cnx.Open()
cmd.CommandText = "insert into utilisateur(login,password,type)value(" & TextBox3.Text & "," & TextBox4.Text & "," & ListBox1.SelectedItem() & ")"
resultat = cmd.ExecuteNonQuery
If (resultat = 0) Then
MessageBox.Show("error")
Else
MessageBox.Show("success")
End If
cnx.Close()
cmd.Dispose()
End Sub

连接的字符串值没有用引号括起来,因此数据库将它们标识为列名,然后由于没有这样的列而失败。此外,这会使您的程序容易受到SQL注入攻击。

更好的方法是使用绑定变量:

cmd.CommandText = "insert into utilisateur (login, password, type) value (@P1, @P2, @P3)"
cmd.Parameters.AddWithValue("@P1", TextBox3.Text)
cmd.Parameters.AddWithValue("@P2", TextBox4.Text)
cmd.Parameters.AddWithValue("@P3", ListBox1.SelectedItem())
cmd.ExecuteNonQuery()

即使出现错误,Using...End Using块也会关闭并处理数据库对象。在这个代码中,连接和命令都包含在内。注意Using行末尾的逗号。

始终使用参数以避免Sql注入。CCD_ 3方法比CCD_。我不得不猜测字段的数据类型和大小。请检查数据库中的实际值。

Sub maj()
Dim resultat As Integer
Using cnx As New MySqlConnection("datasource=localhost;database=bdgeststock;username=root;password="),
cmd As New MySqlCommand("insert into utilisateur(login,`password`,type) values(@Login, @Password, @Type);", cnx)
cmd.Parameters.Add("@Login", MySqlDbType.VarChar).Value = TextBox3.Text
cmd.Parameters.Add("@Password", MySqlDbType.VarChar).Value = TextBox4.Text
cmd.Parameters.Add("@Type", MySqlDbType.VarChar).Value = ListBox1.SelectedItem
cnx.Open()
resultat = cmd.ExecuteNonQuery
End Using
If resultat = 0 Then
MessageBox.Show("error")
Else
MessageBox.Show("success")
End If
End Sub

最新更新