2012-06-28 33 views
2

我有一個Web表單向SQL Server 2008表插入一行。表有一個必須是唯一的字段,但由於某些原因,我們不允許使用自動增量實用程序。取而代之,我選擇此字段的最大值並從代碼中增加它,並插入具有該id的行。asp.net中的併發邏輯

問題是,如果多個人同時使用此表單,就會出現併發問題,並將相同的ID插入表中。我不知道如何在asp.net web項目中解決這個問題,因爲所有用戶都有自己的會話和線程。

關於如何管理asp.net項目中的併發問題的任何想法將非常有用。

謝謝。

+0

「我們不允許使用自動增量工具」 - 我想你指的是SQL Server的標識字段? –

+0

@Alper。你不能通過最大限度地實現這一點。如果發生了刪除,則可能有機會發生相同的記錄。您必須添加一個唯一的密鑰或共享阻止您獲得密鑰的內容,因此可以給出交替的方法 – kbvishnu

回答

1

如果您在存儲過程或代碼中的事務中執行插入操作,我看不出有任何併發​​問題的原因。喜歡的東西:

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();