1

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

一旦用户选择框(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

有时我面临锁定错误(参考图片)。

在此处输入图像描述

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

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

4

1 回答 1

1

必须有另一个进程同时运行。您需要确定它是什么。如果可能,最好的办法是在分析器中捕获死锁,因为它会准确地向您显示哪些进程死锁以及哪个进程死锁。

我假设您在 1 个事务中运行这 2 个查询。

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

但是,如果没有从分析器获得死锁报告,很难说这是否确实发生了。

于 2013-10-07T11:07:42.710 回答