更新和选择后sql server中的锁定错误
Posted
技术标签:
【中文标题】更新和选择后sql server中的锁定错误【英文标题】:Lock error in sql server after updating and selecting 【发布时间】:2013-10-07 10:57:19 【问题描述】:在我的代码中,我需要将托盘编号分配给选定的纸箱。
一旦用户选择框(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 条记录的速度增长。
我不知道我错过了什么。我应该在哪里调查?提前致谢。
【问题讨论】:
【参考方案1】:必须有另一个进程同时运行。您需要确定它是什么。如果可能的话,最好的办法是在分析器中捕获死锁,因为它会准确地显示哪些进程死锁以及一个哪些资源。
我假设您在 1 个事务中运行这 2 个查询。
如果有 2 个进程在运行上面的代码,那么它们可能会同时更新 tblCarton
。第一个更新第 1 页的记录,第二个更新第 2 页的记录。然后他们需要反向更新页面:首先需要更新第 2 页和第二页 1。这将导致死锁。
如果没有从分析器获得死锁报告,很难说这是否确实发生了。
【讨论】:
以上是关于更新和选择后sql server中的锁定错误的主要内容,如果未能解决你的问题,请参考以下文章