2017-06-13 112 views
1

這讓我在上週瘋狂。我已經閱讀了許多有關這個問題的問題和答案,但仍然無法解決我的問題。我已經檢查了所有可能的事件觸發,並找不到任何。重複插入ASP.NET

kondisi.aspx

<!-- some header here --> 

       <form id="form1" runat="server" class="form-horizontal"> 
        <div class="box-body"> 
         <div class="form-group"> 
          <label class="col-sm-2 control-label text-right">Kondisi :</label> 
          <div class="col-sm-10"> 
           <asp:textbox id="tbkondisi" runat="server" cssclass="form-control" textmode="MultiLine"></asp:textbox> 
          </div> 
         </div> 

         <asp:label id="lInfo" runat="server" cssclass="error" visible="False"></asp:label> 
         <asp:label id="linfoberhasil" runat="server" cssclass="berhasil" visible="False"></asp:label> 

         <div class="box-footer text-center"> 
          <dxe:aspxbutton id="btSimpan" runat="server" text="Simpan" cssclass="btn btn-primary" enabledefaultappearance="False"></dxe:aspxbutton> 
          <dxe:aspxbutton id="btBatal" runat="server" text="Reset" cssclass="btn btn-danger" enabledefaultappearance="False"></dxe:aspxbutton> 
         </div> 

         <asp:hiddenfield id="hfID" runat="server" /> 
         <asp:hiddenfield id="hfMode" runat="server" /> 

<!-- some grid and footer here --> 

btSimpan點擊事件,處理的按鈕:

Protected Sub btSimpan_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btSimpan.Click 
    Try 
     If Validasi() Then 
      If hfMode.Value = "Insert" Then 
       Insert() 
       linfoberhasil.Visible = True 
       linfoberhasil.Text = "Simpan Berhasil" 
      Else 
       Update(hfID.Value) 
       linfoberhasil.Visible = True 
       linfoberhasil.Text = "Update Berhasil" 
      End If 
     End If 
    Catch ex As Exception 
     Response.Write("<b>Error button simpan :</b>" & ex.ToString) 
    End Try 
End Sub 

這是檢查重複的項目驗證函數:

Private Function Validasi() As Boolean 
    Try 
     clear_label() 
     If hfMode.Value = "Insert" Then 
      If tbkondisi.Text.Trim = "" Then 
       lInfo.Visible = True 
       lInfo.Text = "Nama kondisi masih kosong" 
       Return False 
      End If 

      sqlstring = "SELECT ID FROM KondisiPengiriman " & _ 
         "WHERE Nama_Kondisi = '" & tbkondisi.Text.Replace("'", "''") & "' " & _ 
         "AND [status] = 1 " 
      result = SQLExecuteScalar(sqlstring) 

      If result <> "" Then 
       lInfo.Visible = True 
       lInfo.Text = "Nama kondisi sudah ada" 
       Return False 
      End If 

     End If 

     If hfMode.Value = "Update" Then 
      If tbkondisi.Text.Trim = "" Then 
       lInfo.Visible = True 
       lInfo.Text = "Nama kondisi masih kosong" 
       Return False 
      End If 
     End If 


     Return True 
    Catch ex As Exception 
     Throw New Exception("Error function Validasi : " & ex.ToString) 
    End Try 
End Function 

而且這裏clear_label()函數重置所有領域:

Private Sub clear_label() 
    lInfo.Visible = False 
    lInfo.Text = "" 
    linfoberhasil.Visible = False 
    linfoberhasil.Text = "" 
End Sub 

最後插入()函數:

Private Sub Insert() 
    Try 
     sqlstring = "INSERT INTO KondisiPengiriman " & _ 
        "(Nama_Kondisi, UserName, [status]) VALUES " & _ 
        "('" & tbkondisi.Text.Replace("'", "''") & "', '" & Session("UserId") & "', 1)" 
     hasil = SQLExecuteNonQuery(sqlstring) 

     If hasil > 0 Then 
      load_grid_kondisi() 
      clear() 
     End If 

    Catch ex As Exception 
     Throw New Exception("<b>Error function insert :</b> " & ex.ToString) 
    End Try 
End Sub 

似乎驗證()剛剛接觸一個時間,它插入2倍,這是同時插入了SQL跟蹤:

RPC:Completed exec sp_reset_connection .Net SqlClient Data Provider  sa 0 0 0 0 15032 55 2017-06-13 10:36:28.910 2017-06-13 10:36:28.910 0X00000000000000002600730070005F00720065007300650074005F0063006F006E006E0065006300740069006F006E00  sa ts11pc  TS11PC 
Audit Login -- network protocol: LPC 
SQL:BatchStarting SELECT ID FROM KondisiPengiriman WHERE Nama_Kondisi = 'tes' AND [status] = 1 .Net SqlClient Data Provider  sa     15032 55 2017-06-13 10:36:28.910    sa ts11pc  TS11PC 
SQL:BatchCompleted SELECT ID FROM KondisiPengiriman WHERE Nama_Kondisi = 'tes' AND [status] = 1 .Net SqlClient Data Provider  sa 0 2 0 0 15032 55 2017-06-13 10:36:28.910 2017-06-13 10:36:28.910   sa ts11pc  TS11PC 
Audit Logout  .Net SqlClient Data Provider  sa 0 1782 0 3 15032 55 2017-06-13 10:36:28.910 2017-06-13 10:36:28.913  1 - Non-DAC sa ts11pc  TS11PC 
RPC:Completed exec sp_reset_connection .Net SqlClient Data Provider  sa 0 0 0 0 15032 55 2017-06-13 10:36:28.913 2017-06-13 10:36:28.913 0X00000000000000002600730070005F00720065007300650074005F0063006F006E006E0065006300740069006F006E00  sa ts11pc  TS11PC 
Audit Login -- network protocol: LPC  
SQL:BatchStarting INSERT INTO KondisiPengiriman (Nama_Kondisi, UserName, [status]) VALUES ('tes', 'LIGITAADMIN', 1) .Net SqlClient Data Provider  sa     15032 55 2017-06-13 10:36:28.913    sa ts11pc  TS11PC 
SQL:BatchCompleted INSERT INTO KondisiPengiriman (Nama_Kondisi, UserName, [status]) VALUES ('tes', 'LIGITAADMIN', 1) .Net SqlClient Data Provider  sa 0 4 0 0 15032 55 2017-06-13 10:36:28.913 2017-06-13 10:36:28.913   sa ts11pc  TS11PC 
Audit Logout  .Net SqlClient Data Provider  sa 0 1786 0 0 15032 55 2017-06-13 10:36:28.913 2017-06-13 10:36:28.913  1 - Non-DAC sa ts11pc  TS11PC 
RPC:Completed exec sp_reset_connection .Net SqlClient Data Provider  sa 0 0 0 0 15032 55 2017-06-13 10:36:28.913 2017-06-13 10:36:28.913 0X00000000000000002600730070005F00720065007300650074005F0063006F006E006E0065006300740069006F006E00  sa ts11pc  TS11PC 
Audit Login -- network protocol: LPC  
SQL:BatchStarting INSERT INTO KondisiPengiriman (Nama_Kondisi, UserName, [status]) VALUES ('tes', 'LIGITAADMIN', 1) .Net SqlClient Data Provider  sa     15032 55 2017-06-13 10:36:28.913    sa ts11pc  TS11PC 
SQL:BatchCompleted INSERT INTO KondisiPengiriman (Nama_Kondisi, UserName, [status]) VALUES ('tes', 'LIGITAADMIN', 1) .Net SqlClient Data Provider  sa 0 4 0 0 15032 55 2017-06-13 10:36:28.913 2017-06-13 10:36:28.913   sa ts11pc  TS11PC 
Audit Logout  .Net SqlClient Data Provider  sa 0 1790 0 3 15032 55 2017-06-13 10:36:28.917 2017-06-13 10:36:28.920  1 - Non-DAC sa ts11pc  TS11PC 
RPC:Completed exec sp_reset_connection .Net SqlClient Data Provider  sa 15 0 0 0 15032 55 2017-06-13 10:36:28.920 2017-06-13 10:36:28.920 0X00000000000000002600730070005F00720065007300650074005F0063006F006E006E0065006300740069006F006E00  sa ts11pc  TS11PC 
Audit Login -- network protocol: LPC  
SQL:BatchStarting SELECT ID, Nama_Kondisi from KondisiPengiriman where [status] = 1 .Net SqlClient Data Provider  sa     15032 55 2017-06-13 10:36:28.920    sa ts11pc  TS11PC 
SQL:BatchCompleted SELECT ID, Nama_Kondisi from KondisiPengiriman where [status] = 1 .Net SqlClient Data Provider  sa 0 2 0 0 15032 55 2017-06-13 10:36:28.920 2017-06-13 10:36:28.920   sa ts11pc  TS11PC 
Audit Logout  .Net SqlClient Data Provider  sa 0 1792 0 354220 15032 55 2017-06-13 10:36:28.920 2017-06-13 10:42:23.140  1 - Non-DAC sa ts11pc  TS11PC 

我想不出什麼原因引起的這一點,似乎函數只是運行1次,但插入指令的2倍。幫助和指導來解決這個真正appreaciated。非常感謝你。

+1

在visual studio中附加調試器,設置斷點,查看調用堆棧以查看導致雙觸發的原因。 – Steve

+0

在另一個說明中,使用'SqlParameters' .... – Codexer

+0

@steve:它說'這是不是有效的斷點位置',當我嘗試在insert()函數中設置時,但我已經試過在insert給我重複的插入。 –

回答

2

對不起,我以爲SQLExecuteNonQuery(sqlstring)是內置命令。顯然這是自定義功能,它檢查了備份服務器的兩個實例名稱。並在設置中,這2個實例名稱指向同一個服務器,它是什麼使雙重插入。

現在通過刪除一個實例名來完成。謝謝。