通过asp编码双重插入sql db

时间:2011-10-13 00:13:17

标签: asp.net sql-server-2005

这段代码工作正常,但只需点击一下按钮就可以在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

3 个答案:

答案 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权限。