更新和选择后,sql server中的锁定错误

时间:2013-10-07 10:57:19

标签: sql sql-server locking sql-server-2012 deadlock

在我的代码中,我需要将托盘编号分配给选定的纸箱。

一旦用户选择了框(15-30个框)并按OK,我运行以下代码。

//UPDATE THE PALLET NO FOR ALL THE SELECTED CARTONS

          foreach (DataGridViewRow item in dgvCartonDetails.Rows)
            {
                dbLayer.tblCartonUpdatePalletid(item.Cells["CM_ID"].Value.ToString(), Pno, _Settings.Line.ToString());

    //STORED PROCEDURE:tblCartonUpdatePalletid
    //update tblCarton set CM_palletid = @palletid, cm_cartoncompletetime = getdate() where cm_id = @cm_id
            }
            //PRINT ALL THE BOXES IN THE PALLET
            dbLayer.tblPrintAllCartonsOfthePallet(PalletID);

    //STORED PROCEDURE: tblPrintAllCartonsOfthePallet
    //select * from tblCarton where cm_palletid = @PalletID

有时候我会遇到锁定错误(参考图片)。

enter image description here

我已经提供了存储过程数据以供参考。纸箱表将以每天5000条记录的速度增加。

我不知道我错过了什么。我应该在哪里看看?提前谢谢。

1 个答案:

答案 0 :(得分:1)

必须同时运行另一个进程。你需要确定它是什么。如果可能的话,最好的办法是捕获探查器中的死锁,因为它会准确显示哪些进程死锁,哪一个是资源。

我假设您在一次交易中运行这两个查询。

如果有两个进程运行上面的代码,可能会发生的情况是他们同时更新tblCarton。第一个更新第1页的记录,第二个更新第2页的记录。然后他们需要反向更新页面:首先需要更新第2页和第2页。这将导致死锁。

虽然没有得到分析器的死锁报告,但很难说这是否确实发生了。