这段代码工作正常,但只需点击一下按钮就可以在sql db中插入两次相同的数据。如果我犯了一些错误,请告诉我..
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cmd As New SqlCommand
Dim str As String
str = "insert into cmember(name,period,design,duty,quali,cont)values ('" & TextBox1.Text & "', '" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "', '" & TextBox5.Text & "','" & TextBox6.Text & "')"
If con.State = ConnectionState.Closed Then
con.Open()
End If
Try
cmd.CommandType = CommandType.Text
cmd.Connection = con
cmd.CommandText = str
Catch ex As Exception
MsgBox(e.ToString)
End Try
If cmd.ExecuteNonQuery Then
Label1.Text = "entry saved"
con.Close()
Else
Label1.Text = "entry not saved"
End If
End Sub
答案 0 :(得分:1)
我看不出它在当前代码段中插入两次相同记录的正当理由。可能是按钮被击中两次或者您正在刷新网页。
非主题:不要使用硬编码的SQL语句。使用参数化查询。 (阅读SQL Injection)
str = "insert into cmember (name,period,design,duty,quali,cont) values
(@name,@period,@design,@duty,@quali,@cont)"
答案 1 :(得分:0)
这可能看起来很傻,但你不是双击按钮,是吗? 此外,永远不要在ASP中使用Msgbox调用 - 消息框将出现在服务器上,而不是在浏览器上,并且它将阻止该线程直到被单击。您最好创建一个ASP Label控件并将文本分配给它。 另外,Try块中包含的位只是设置,永远不会抛出错误 - try块应该在打开连接的命令周围,以及执行查询的位置。
答案 2 :(得分:0)
您的代码似乎没有两次插入此数据。
了解究竟发生了什么的最佳方法是通过SQL Server Profiler运行跟踪。为此,您需要确保您对实例拥有ALTER TRACE
权限。