2011-10-13 38 views
-1

这段代码工作正常,但它只在一个按钮单击时在sql数据库中插入相同的数据两次。如果我做了一些错误的PLZ让我知道..通过asp编码双重插入到sql数据库中

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 

回答

1

我不明白为什么它在当前代码片段插入两次相同的记录的正当理由。可能是一个按钮被击中两次,或者你正在刷新一个网页。

题外话:不要使用硬编码的SQL语句。使用参数化查询。 (阅读约SQL Injection

str = "insert into cmember (name,period,design,duty,quali,cont) values 
        (@name,@period,@design,@duty,@quali,@cont)" 
0

这可能看起来很愚蠢,但你不是双击按钮,是吗? 此外,绝对不要在ASP中使用Msgbox调用 - 消息框将显示在服务器上,而不是浏览器上,并且它会阻塞该线程直到被点击。你最好创建一个ASP Label控件并将文本分配给它。 此外,包含在Try块中的位仅仅是设置,并且永远不会抛出错误 - try块应该位于打开连接的命令以及执行查询的位置。

0

您的代码不会出现两次插入此数据。

找出究竟发生了什么的最好方法是通过SQL Server Profiler运行跟踪。要做到这一点,您需要确保您具有实例的ALTER TRACE权限。

相关问题