更新和删除新添加的行时发生并发冲突

时间:2012-12-14 18:17:12

标签: sql sql-server c#-4.0 concurrency

我一直在C#和Sql Server 2012中使用数据集开发一个CRUD应用程序。该项目基本上是一个包含神奇宝贝信息(名称,能力,类型,图像等)的议程。 几个月来,我一直面临与并发冲突相关的问题。换句话说,当我尝试删除或更新我在程序的同一执行期间刚刚添加的行时,会生成并发异常,并且无法在数据库中执行任何其他更改。因此,我需要重新启动程序才能再次执行更改(重要说明:此异常仅适用于通过C#添加的新行)。 我一直在寻找这种违规(不使用Entity Framework或LINQ to SQL)的解决方案,但我找不到任何我可以在C#的源代码中添加的内容。有谁知道如何处理这个?我应该在源代码中实现什么? SQL Server中有什么可以帮助的吗?

这是我项目的链接,数据库备份,主表单图像和数据库图表:

http://www.mediafire.com/download.php?izkat44a0e4q8em(C#源代码)

http://www.mediafire.com/download.php?rj2e118pliarae2(Sql备份)

imageshack .us / a / img 708/38 23 / pokmonform .png(主要表格)

imageshack .us / a / img 18/95 46 / kantopokdexdiagram .png(数据库图表)

1 个答案:

答案 0 :(得分:0)

我查看了你的代码,似乎你在数据表daKanto上使用AcceptChanges不一致。实际上你使用AcceptChangesDuringUpdate,这也很好,虽然我更喜欢在更新后明确地调用方法datatable.AcceptChanges(),但你的方式也没问题。 无论如何我注意到你在方法Delete_Click和Update__Click中使用AcceptChangesDuringUpdate,但是不要在Save_Click中使用它,而且我认为你应该在MainForm_Load中使用AcceptChangesDuringFill来填充你的数据集。 我无法向您保证,它会有所帮助,但我知道整个应用程序中数据访问的一致性可以降低意外数据一致性错误的风险。