在我的代码中,我需要将托盘编号分配给选定的纸箱。
一旦用户选择了框(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条记录的速度增加。
我不知道我错过了什么。我应该在哪里看看?提前谢谢。
答案 0 :(得分:1)
必须同时运行另一个进程。你需要确定它是什么。如果可能的话,最好的办法是捕获探查器中的死锁,因为它会准确显示哪些进程死锁,哪一个是资源。
我假设您在一次交易中运行这两个查询。
如果有两个进程运行上面的代码,可能会发生的情况是他们同时更新tblCarton
。第一个更新第1页的记录,第二个更新第2页的记录。然后他们需要反向更新页面:首先需要更新第2页和第2页。这将导致死锁。
虽然没有得到分析器的死锁报告,但很难说这是否确实发生了。