2013-02-18 110 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 
    

希望这会有所帮助。