2011-10-13 87 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權限。

相關問題