【发布时间】:2015-06-29 16:21:02
【问题描述】:
我有两个组合框,一个消息框和一个发送按钮。当应用程序启动时,我在组合框和消息框为空的情况下单击发送按钮,弹出一个框并显示"Select a client" 执行此操作后,我返回数据库并看到它已将新记录添加到那个表,即使我在点击“发送”按钮后没有输入任何数据。同样适用于当我拥有的三个控件之一有数据但其他两个没有,并且程序要求我在成功之前输入该数据时。但是,尽管有这些 If 语句,它仍然会添加记录。我究竟做错了什么?
我的代码:
Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("conStr").ConnectionString)
con.Open()
Using cmd As New SqlCommand
cmd.Connection = con
cmd.CommandText = "insert into tblMyTable(Client, UserName, Message) values('" & cboClient.Text & "', '" & cboUser.Text & "', '" & rtfMessage.Text & "')"
cmd.ExecuteNonQuery()
End Using
If cboClient.Text = "" Then
MsgBox("Select a client")
ElseIf cboUser.Text = "" Then
MsgBox("Select a user")
ElseIf rtfMessage.Text = "" Then
MsgBox("Enter a message")
Else
MsgBox("Message Sent")
End If
con.Close()
End Using
【问题讨论】:
-
您正在执行查询,然后要求用户验证数据?使用参数避免sql注入,顺便说一句。
-
您在任何条件检查之前进行插入,这对 sql 命令无论如何都没有影响。
-
当然它会获取新行。插入数据的唯一行是在 IF 语句之前。顺便说一句,您的代码是 sql 注入的教科书示例。您需要对该查询进行参数化。
-
我该怎么做?
-
使用参数化插入,你有SQL注入漏洞。
标签: sql sql-server vb.net