【问题标题】:Why SQL insert two records at the same time duplicate from VB?为什么SQL从VB中同时插入两条重复的记录?
【发布时间】:2018-01-15 05:34:18
【问题描述】:

这是我在 vb 中的代码:

 cmd = New SqlCommand("INSERT INTO export (eDate, qty, stockID, empID, machineID, jobID, receiptNO, plateQty, eDesc) VALUES (@eDate, @qty, @stockID, @empID, @machineID, @jobID, @receiptNO, @plateQty, @eDesc)", con)
    cmd.CommandTimeout = 1000
    cmd.CommandType = CommandType.Text
    cmd.Parameters.AddWithValue("@eDate", dateTXT.Text)
    cmd.Parameters.AddWithValue("@qty", qtyTXT.Text)
    cmd.Parameters.AddWithValue("@stockID", comboStock.SelectedValue)
    cmd.Parameters.AddWithValue("@empID", comboEmp.SelectedValue)
    cmd.Parameters.AddWithValue("@machineID", comboMachine.SelectedValue)
    cmd.Parameters.AddWithValue("@jobID", comboJob.SelectedValue)
    cmd.Parameters.AddWithValue("@receiptNO", receiptTXT.Text)
    cmd.Parameters.AddWithValue("@plateQty", TextBox1.Text)
    cmd.Parameters.AddWithValue("@eDesc", descTXT.Text)

    cmd.ExecuteNonQuery()
    If (cmd.ExecuteNonQuery) Then
        cmd = New SqlCommand("UPDATE stock SET qty = qty - @qty WHERE id = '" & comboStock.SelectedValue & "'", con)
        cmd.Parameters.AddWithValue("@qty", qtyTXT.Text)
        cmd.ExecuteNonQuery()
        MsgBox.Show("Successfuly saved!")
    Else

        MessageBox.Show("Not saved!")

    End If

我有两个表(出口和库存),当我在导出表中插入记录时,它还应该更新库存项目,但我的问题是,当我插入要导出的记录时,将其保存在表副本中。 我该怎么做?

【问题讨论】:

  • 您正在执行您的查询 2 次。 cmd.ExecuteNonQuery() If (cmd.ExecuteNonQuery) Then

标签: sql sql-server vb.net


【解决方案1】:

您正在执行插入查询 2 次​​p>

cmd.ExecuteNonQuery()
If (cmd.ExecuteNonQuery) Then

如果您想检查是否插入了某些内容,请删除顶部的 ExecuteNonQuery() 并将您的 If 语句更改为此。

If (cmd.ExecuteNonQuery) > 0 Then

【讨论】:

    【解决方案2】:

    这部分代码再次调用ExecuteNonQuery()

    If (cmd.ExecuteNonQuery) Then
    

    这是导致重复INSERT 的原因:

    SqlCommand("INSERT INTO export (eDate, qty, stockID, empID, machineID, jobID, receiptNO, plateQty, eDesc) 
                VALUES (@eDate, @qty, @stockID, @empID, @machineID, @jobID, @receiptNO, @plateQty, @eDesc)", con)
    

    我会根据您的要求亲自创建一个Insert trigger

    当我在导出表中插入一条记录时,它还应该更新库存项目

    【讨论】:

      【解决方案3】:

       cmd.ExecuteNonQuery()    '//This will insert to the DB
      
       '// I know you are only checking to see if the insert was successful, '
       '// but you are essentially inserting again, then testing.'
       If (cmd.ExecuteNonQuery) Then
          ...
          ...
       End If
      

      这是避免重复 insert 的一种方法。

      Dim NumberOfRowsInserted = cmd.ExecuteNonQuery()
      '// now this variable will hold either 1 if the insert command was successful'
      '// or 0 if the insert failed'
      
      If NumberOfRowsInserted > 0 Then
          '// do whatever'
          ...
          ...
          ...
      End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 2016-10-16
        相关资源
        最近更新 更多