Vb.net 事务查询中的if-else提供奇怪的输出

Vb.net 事务查询中的if-else提供奇怪的输出,vb.net,transactions,Vb.net,Transactions,下面是我更新发票中项目的代码。 我添加了一些项目,并根据值更新了一些项目,但这只是在所有行中插入或更新相同的值。我认为是参数造成了问题,请指导我纠正故障 con.Open() tra = con.BeginTransaction sqlstr = "UPDATE transaction_Mas_Tab set billdate=@billdate,invoiceno=@invoiceno,TotalBillamt=@TotalBillamt,nar

下面是我更新发票中项目的代码。 我添加了一些项目,并根据值更新了一些项目,但这只是在所有行中插入或更新相同的值。我认为是参数造成了问题,请指导我纠正故障

        con.Open()
        tra = con.BeginTransaction
        sqlstr = "UPDATE transaction_Mas_Tab set billdate=@billdate,invoiceno=@invoiceno,TotalBillamt=@TotalBillamt,narration=@narration,orderdate=@orderdate,usercode=@usercode,lcode=@lcode,remarks=@remarks,grossamt=@grossamt where txid=@txid "
        cmd = New OleDbCommand(sqlstr, con, tra)
        cmd.Parameters.AddWithValue("@billdate", dtpbilldate.Text)
        cmd.Parameters.AddWithValue("@invoiceno", txtinvoiceno.Text)
        cmd.Parameters.AddWithValue("@TotalBillamt", Val(txtgt.Text))
        cmd.Parameters.AddWithValue("@narration", txtnote.Text)
        cmd.Parameters.AddWithValue("@orderdate", dtpbilldate.Text)
        cmd.Parameters.AddWithValue("@usercode", usercode)
        cmd.Parameters.AddWithValue("@lcode", cmbparty.SelectedValue)
        cmd.Parameters.AddWithValue("@remarks", txtrmrks.Text)
        cmd.Parameters.AddWithValue("@grossamt", Val(txttotalamt.Text))
        cmd.Parameters.AddWithValue("@txid", txid)
        cmd.ExecuteNonQuery()     
        For c As Integer = 0 To dgvsitemlist.Rows.Count - 1
            If dgvsitemlist.Rows(c).Cells("onew").Value.ToString = "N" And dgvsitemlist.Rows(c).Cells("isdel").Value.ToString = "N" Then
                sqlstr = "insert into transaction_details (txid,itemid,unit,irate,iqty,isdeleted)  values(@txid,@itemid,@unit,@irate,@iqty,@isdeleted)"
                cmd = New OleDbCommand(sqlstr, con, tra)
                cmd.Parameters.AddWithValue("@txid", txxid)
                cmd.Parameters.AddWithValue("@itemid", dgvsitemlist.Rows(c).Cells("itemid").Value.ToString)
                cmd.Parameters.AddWithValue("@unit", dgvsitemlist.Rows(c).Cells("unitid").Value.ToString)
                cmd.Parameters.AddWithValue("@irate", Val(dgvsitemlist.Rows(c).Cells("prate").Value))
                cmd.Parameters.AddWithValue("@iqty", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@isdeleted", "N")
                cmd.ExecuteNonQuery()

                sqlstr = "INSERT INTO IMasterDetails ( icode,batch,prate,srate,opstock,clstock,pscheme,sscheme,itemid) values (  @icode ,@batch , @prate , @srate,@opstock,@clstock,@pscheme,@sscheme,@itemid )"
                cmd = New OleDbCommand(sqlstr, con, tra)
                cmd.Parameters.AddWithValue("@icode", dgvsitemlist.Rows(c).Cells("icode").Value.ToString)
                cmd.Parameters.AddWithValue("@batch", dgvsitemlist.Rows(c).Cells("batch").Value.ToString)
                cmd.Parameters.AddWithValue("@prate", Val(dgvsitemlist.Rows(c).Cells("prate").Value))
                cmd.Parameters.AddWithValue("@srate", Val(dgvsitemlist.Rows(c).Cells("srate").Value))
                cmd.Parameters.AddWithValue("@opstock", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@clstock", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@pscheme", dgvsitemlist.Rows(c).Cells("pscheme").Value.ToString)
                cmd.Parameters.AddWithValue("@sscheme", dgvsitemlist.Rows(c).Cells("sscheme").Value.ToString)
                cmd.Parameters.AddWithValue("@itemid", dgvsitemlist.Rows(c).Cells("itemid").Value.ToString)

            ElseIf dgvsitemlist.Rows(c).Cells("onew").Value.ToString = "O" And dgvsitemlist.Rows(c).Cells("isdel").Value.ToString = "N" Then
                sqlstr = "update transaction_details set itemid=@itemid,unit=@unit,irate=@irate,iqty=@iqty,isdeleted=@isdeleted where txid=@txid"
                cmd = New OleDbCommand(sqlstr, con, tra)
                cmd.Parameters.AddWithValue("@itemid", dgvsitemlist.Rows(c).Cells("itemid").Value.ToString)
                cmd.Parameters.AddWithValue("@unit", dgvsitemlist.Rows(c).Cells("unitid").Value.ToString)
                cmd.Parameters.AddWithValue("@irate", Val(dgvsitemlist.Rows(c).Cells("prate").Value))
                cmd.Parameters.AddWithValue("@iqty", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@isdeleted", "N")
                cmd.Parameters.AddWithValue("@txid", txxid)
                cmd.ExecuteNonQuery()

                sqlstr = "Update IMasterDetails set icode=@icode,batch=@batch,prate=@prate,srate=@srate,opstock=@opstock,clstock=@clstock,pscheme=@pscheme,sscheme=@sscheme where itemid=@itemid "
                cmd = New OleDbCommand(sqlstr, con, tra)
                cmd.Parameters.AddWithValue("@icode", dgvsitemlist.Rows(c).Cells("icode").Value.ToString)
                cmd.Parameters.AddWithValue("@batch", dgvsitemlist.Rows(c).Cells("batch").Value.ToString)
                cmd.Parameters.AddWithValue("@prate", Val(dgvsitemlist.Rows(c).Cells("prate").Value))
                cmd.Parameters.AddWithValue("@srate", Val(dgvsitemlist.Rows(c).Cells("srate").Value))
                cmd.Parameters.AddWithValue("@opstock", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@clstock", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@pscheme", dgvsitemlist.Rows(c).Cells("pscheme").Value.ToString)
                cmd.Parameters.AddWithValue("@sscheme", dgvsitemlist.Rows(c).Cells("sscheme").Value.ToString)
                cmd.Parameters.AddWithValue("@itemid", dgvsitemlist.Rows(c).Cells("itemid").Value.ToString)
                cmd.ExecuteNonQuery()

            ElseIf dgvsitemlist.Rows(c).Cells("onew").Value.ToString = "O" And dgvsitemlist.Rows(c).Cells("isdel").Value.ToString = "Y" Then
                sqlstr = "update transaction_details set itemid=@itemid,unit=@unit,irate=@irate,iqty=@iqty,isdeleted=@isdeleted where txid=@txid"
                cmd = New OleDbCommand(sqlstr, con, tra)
                cmd.Parameters.AddWithValue("@itemid", dgvsitemlist.Rows(c).Cells("itemid").Value.ToString)
                cmd.Parameters.AddWithValue("@unit", dgvsitemlist.Rows(c).Cells("unitid").Value.ToString)
                cmd.Parameters.AddWithValue("@irate", Val(dgvsitemlist.Rows(c).Cells("prate").Value))
                cmd.Parameters.AddWithValue("@iqty", Val(dgvsitemlist.Rows(c).Cells("qty").Value))
                cmd.Parameters.AddWithValue("@isdeleted", "Y")
                cmd.Parameters.AddWithValue("@txid", txxid)
                cmd.ExecuteNonQuery()
            End If
        Next

        tra.Commit()
        updatebilldata = txid
        clearall()
        clearsave()
    Catch ex As Exception
        MsgBox("Some thing Went Wrong")
        tra.Rollback()
        updatebilldata = Nothing
    End Try
End Using

尝试在每个
cmd.ExecuteNonQuery()
之后添加
cmd.Parameters.Clear()
。由于您每次都在使用
New
,所以这应该不是必需的,但考虑到您的症状,我认为值得一试。在更新中,WHERE子句值使用txxid,但我看不到该值有任何变化。这可能是导致您遇到问题的原因。在IMasterDetails之后缺少ExecuteOnQuery。所有使用txxid的更新都将被覆盖,因为txxid不会为每行更改。另外,您应该考虑为rowIndex或其他东西重命名该“c”变量。也许打开这个选项?您可能会看到txxid是否正在初始化。