在Gridview中,当用户在记录上更新以及如何限制其他用户不在同一记录上更新?如何避免gridview对特定记录的并发更新?
0
A
回答
0
有一些方法可以将记录“锁定”到一个用户,但这会导致数据库非常慢,更不用说在实际情况下它不是那么实际。避免并发问题的更好方法是在加载gridview时捕获原始值,并且一旦运行更新语句或删除语句,如果原始值不匹配,则数据库会拒绝该命令。看看我几周前做过的这个项目的代码。特别注意原始值的参考。
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:TechSupport_DataConnectionString %>"
DeleteCommand="DELETE FROM [Technicians] WHERE [TechID] = @original_TechID AND [Name] = @original_Name AND [Email] = @original_Email AND [Phone] = @original_Phone"
InsertCommand="INSERT INTO [Technicians] ([Name], [Email], [Phone]) VALUES (@Name, @Email, @Phone)"
OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT * FROM [Technicians] WHERE ([TechID] = @TechID)"
UpdateCommand="UPDATE [Technicians] SET [Name] = @Name, [Email] = @Email, [Phone] = @Phone WHERE [TechID] = @original_TechID AND [Name] = @original_Name AND [Email] = @original_Email AND [Phone] = @original_Phone">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="TechID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="original_TechID" Type="Int32" />
<asp:Parameter Name="original_Name" Type="String" />
<asp:Parameter Name="original_Email" Type="String" />
<asp:Parameter Name="original_Phone" Type="String" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Email" Type="String" />
<asp:Parameter Name="Phone" Type="String" />
<asp:Parameter Name="original_TechID" Type="Int32" />
<asp:Parameter Name="original_Name" Type="String" />
<asp:Parameter Name="original_Email" Type="String" />
<asp:Parameter Name="original_Phone" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Email" Type="String" />
<asp:Parameter Name="Phone" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
调整SQL语句之后,那么你只需要一些代码来处理使用事件处理程序,如“插入项目”等任何数据库例外请参见下面的代码。
protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
if (e.Exception != null)
{
lblError.Text = "A database error has occurred.<br /><br />" + "Message: " + e.Exception.Message;
e.ExceptionHandled = true;
e.KeepInEditMode = true;
}
else if (e.AffectedRows == 0)
lblError.Text = "Another user may have updated that product." + "<br />Please try again.";
else
DetailsView1.DataBind();
}
protected void DetailsView1_ItemDeleted(object sender, DetailsViewDeletedEventArgs e)
{
if (e.Exception != null)
{
lblError.Text = "A database error has occurred.<br /><br />" + "Message: " + e.Exception.Message;
e.ExceptionHandled = true;
}
else if (e.AffectedRows == 0)
lblError.Text = "Another user may have updated that product." + "<br />Please try again.";
else
DetailsView1.DataBind();
DropDownList1.DataBind();
}
protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
if (e.Exception != null)
{
lblError.Text = "A database error has occurred.<br /><br />" + "Message: " + e.Exception.Message;
e.ExceptionHandled = true;
e.KeepInInsertMode = true;
}
else
DetailsView1.DataBind();
DropDownList1.DataBind();
}
希望有所帮助。
0
如果您的意思是如何避免数据库级别的并发错误,您可以通过您用来更新记录的代码来实现。
Here's关于这个问题的一个很好的链接。还有很多其他的。
如果你的意思是“如何防止用户开始编辑其他人正在更新另一个GridView过程中的记录”,那将会更加复杂。有很多不同的方法可以做到这一点,但我想我会考虑保留正在更新的记录的ID的缓存,并提供一些用于过期条目的方法(在用户开始编辑但漫游的情况下关机,系统故障,否则永远不会完成)。
相关问题
- 1. 如何避免特定目录的RewriteRule?
- 2. 如何避免重复记录并发请求在Laravel
- 3. 如何更新telerik gridview中的记录?
- 4. 如何避免特定记录由别人在MS CRM
- 5. 避免回发GridView事件
- 6. 如何使用特定字段更新特定记录dbAccess swift
- 7. 如何避免炸毁交易记录?
- 8. 选择一个列表,并根据某个字段逐个更新记录。如何避免重复更新?
- 9. 在Log4j2中,如何避免记录包含特定文本的消息?
- 10. 如何避免在同一时间更新同一记录时发生更新冲突
- 11. Gridview不刷新显示更新记录
- 12. 避免与ASP.NET GridView相关的回发
- 13. 在CRM 2011中更新记录时避免重复C#
- 14. 如何避免将特定元素添加到浏览器历史记录中?
- 15. JSP上点击更新特定记录
- 16. 如何分配记录以避免与其他用户同时进行更新
- 17. 用于更新特定记录列值的MySQL触发器
- 18. 如何更新Realm中的特定记录Objective-C
- 19. 如何避免LazyLoad对特定类的影响?
- 20. 避免发布两次? gridview控件
- 21. 如何滚动到gridview中的特定记录是在div
- 22. 如何在Gridview第一行显示更新的记录
- 23. 如何避免在更新hibernate中的父级时更新子对象?
- 24. 如何更快地过滤gridview记录?
- 25. 如何让DataContext在更新记录时忽略特定字段?
- 26. 地图,以避免重复的记录
- 27. 点击特定提交按钮更新特定记录
- 28. 如何避免第一次更新。对(“值”
- 29. 避免“在更新current_timestamp”
- 30. 如何更新记录