2013-02-18 149 views
2

在我的vb.net應用程序中,我需要將一個表中的一些數據備份到另一個表中。這裏是我的代碼Vb.net插入行語句執行兩次

con2.Open() 
txt2 = "select * from pension where empno='" & empno & "' ORDER BY year" 
cmd2 = New SqlCommand(txt2, con2) 
reader2 = cmd2.ExecuteReader() 
While reader2.Read 
    yr = reader2("year") 
    totpension = reader2("total") 
    If dr <> yr Then 
     dcrg = 0 
     comm = 0 
    End If 
    tot1 = dcrg + comm + totpension 
    con3.Open() 
    txt1 = "Insert into over1 values('" & empno & "','" & name & "','" & yr & "','" & dcrg & "', '" & comm & "','" & totpension & "','" & tot1 & "')" 
    cmd3 = New SqlCommand(txt1, con3) 
    cmd3.ExecuteNonQuery() 
    con3.Close() 
End While 
reader2.Close() 
con2.Close() 

的問題是它插入每條記錄兩次,我刪除了ORDER BY,也是同樣的問題仍然存在。使用參數化查詢也有同樣的問題。

有人可以解釋我的代碼中有什麼問題,以及如何解決它? 在此先感謝

+0

不,單條記錄 – 2013-02-18 07:04:50

+0

如果您試圖將表'pension'中的行插入到表'over1'中,則可以直接使用'INSERT INTO over1 SELECT * FROM pension where ...'而不需要循環。 – 2013-02-18 07:06:47

+0

基於'txt1'的值,它看起來不像OP試圖從一個表插入一條記錄到另一個表。 – Tim 2013-02-18 07:09:17

回答

0

多件事情,
如果您有退休金錶中的每個員工,然後
使用if reader2.Read代替while reader2.Read

的單條記錄。如果問題仍然存在,那麼問題是您兩次執行這種方法。問題是如何?

  1. 如果是方法。然後,你可以進行兩次調用這個方法
  2. 如果是一個事件則可能是你的兩倍
    所以處理該事件,檢查從該事件被觸發,該事件被稱爲有控制標籤。這樣

    <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click"/> 
    

    ,並檢查如果你定義OnClick屬性必須從活動中刪除Handles btnSubmit.Click事件的Handled財產

    Private Sub btnSubmit_Click(ByVal sender As Object, _ 
    ByVal e As StartEventArgs) Handles btnSubmit.Click 
    

希望這會有所幫助。