我有一个在 SQL Server 2008 表中插入一行的 Web 表单。表有一个必须唯一的字段,但由于某些原因,我们不允许使用自动增量实用程序。取而代之的是,我选择了该字段的最大值并从代码中增加它并插入具有该 ID 的行。
问题是,如果多人同时使用此表单,则会出现并发问题,并且会将相同的 id 插入到表中。我不知道如何在 asp.net web 项目中解决这个问题,因为所有用户都有自己的会话和线程。
关于如何在 asp.net 项目中管理并发问题的任何想法都将非常有用。
谢谢。
我有一个在 SQL Server 2008 表中插入一行的 Web 表单。表有一个必须唯一的字段,但由于某些原因,我们不允许使用自动增量实用程序。取而代之的是,我选择了该字段的最大值并从代码中增加它并插入具有该 ID 的行。
问题是,如果多人同时使用此表单,则会出现并发问题,并且会将相同的 id 插入到表中。我不知道如何在 asp.net web 项目中解决这个问题,因为所有用户都有自己的会话和线程。
关于如何在 asp.net 项目中管理并发问题的任何想法都将非常有用。
谢谢。
如果您在存储过程中或在代码中的事务中执行插入操作,我看不出存在并发问题的原因。就像是:
BEGIN TRAN
DECLARE @MAX int
SELECT @MAX = MAX(ID) FROM MyTable
INSERT INTO MyTable (@MAX, VAlue, Value2..)
COMMIT TRAN
或者
SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;
transaction = connection.BeginTransaction("InsertRow");
... perform insert using command object ...
transaction.Commit();