该应用程序使用 ASP.NET Web 表单在 .NET 中进行编码。我正在尝试更改数百个订单号的
Priority
代码。
要分配的新代码是用户在 GridView 中订单号旁边的下拉列表中选择的代码。
这是我的 SQL 更新语句,当用户单击更新按钮时执行:
for (int i = 0; i < GridView1.Rows.Count; i++)
{
DropDownList PTY_CHANGE = (DropDownList)GridView1.Rows[i].FindControl("PTY_CHANGE");
cnn3.Open();
query = @"
BEGIN TRAN T1
UPDATE DATAORDERS
SET DATAORDERS.PRIORITYCODE =@PTYCODE
WHERE DATAORDERS.ORDERNO =@ORDERNO
COMMIT TRAN T1";
SqlCommand cmd = new SqlCommand(query, cnn3);
cmd.Parameters.AddWithValue("@PTYCODE ", PTY_CHANGE.SelectedItem.Value);
cmd.Parameters.AddWithValue("@orderno", GridView1.Rows[i].Cells[0].Text);
cmd.CommandTimeout = 180;
cmd.ExecuteReader();
cnn3.Close();
}
我遇到的问题是某些订单被锁定(很可能公司中的其他人正在不同的模块中处理该订单),因此代码就会停止。
我想跳过该订单,然后尝试更新列表中的下一个订单号。
谢谢您的帮助。
READPAST 指定数据库引擎不读取被其他事务锁定的行。
BEGIN TRAN T1
UPDATE DATAORDERS WITH (READPAST)
SET DATAORDERS.PRIORITYCODE =@PTYCODE WHERE DATAORDERS.ORDERNO =@ORDERNO
COMMIT TRAN T1