【发布时间】:2013-03-25 04:22:46
【问题描述】:
我在 C# 中创建了两个线程,并且我正在并行调用两个单独的函数。这两个函数都从 XYZ 表中读取最后一个 ID 并插入值为 ID+1 的新记录。这里 ID 列是主键。当我执行这两个函数时,我收到主键违规错误。这两个函数都有以下查询:
insert into XYZ values((SELECT max(ID)+1 from XYZ),'Name')
似乎两个函数都在一次读取值并尝试插入相同的值。 我该如何解决这个问题..?
【问题讨论】:
-
嗯,Java 有一个 synchronized 关键字来防止多个线程相互干扰。我建议你在 C# 中查找类似结构的一些多线程链接
-
@ChetterHummin 不,他的问题是他试图找出要在应用程序中插入的 ID,而他应该让数据库处理它。是的,他也可以创建一个共享和同步的 ID 变量,但这不会阻止数据库同步的问题。例如,考虑第三方向他的表中插入不使用他的共享变量的问题。然后他还是有同样的问题。
-
@KyleM 感谢您的澄清!
标签: c# sql-server sql-server-2008