2014-01-25 40 views
0

進入我開發一個.aspx頁面中有如下的設計重複記錄沒有在數據庫表

Firstname 
Lastname 
Address 
City 
Mobile 

這表示與標籤和文本框的用戶。

當用戶單擊保存按鈕時,數據保存在SQL Server 2008 Express數據庫表中。

表有以下模式

RecordNo-int(PK) 
Firstname-nvarchar(50) 
Lastname-nvarchar(50) 
Address-nvarchar(500) 
City-nvarchar(50) 
Mobile-nvarchar(12) 

在頁面加載的時間,我也顯示recordno用戶。

該記錄號是根據表中有多少條記錄生成的。

我得到的記錄數,只是增加1,並把它對RecordNo。

現在,如果這是發生在一臺PC上,它工作正常。

第一個入口將用RecordNo 1表示

等等。

但是,如果沒有在表中沒有記錄,並在同一個頁面是由4個不同的用戶在同一時間打開,那麼一切都將

與RecordNo 1

,然後表示,首先點擊保存按鈕的用戶將能夠完美保存數據。

但是其他三個用戶會遇到錯誤,因爲他們正在輸入已經輸入的RecordNo 1的信息。

我該如何克服這個問題?

每個新條目都應該賦予新的唯一RecordNo。

有什麼辦法可以做到這一點?

回答

0

使RecordNo一個IDENTITY(1,1)字段,並忘記所有的邏輯來生成密鑰。 IDENTITY會自動爲你做這件事。

如果您需要在插入記錄以捕獲生成的值之後調用SCOPE_IDENTITY()。

+0

但如果我不想使用的身份?還有其他解決方案嗎?我需要在輸入時顯示RecordNo。 – Hemal

+0

在SQL 2008上,你也可以使用SEQUENCE。你也可以編寫你自己的存儲過程(有幾個)鎖定表並停止生成相同的數字。但是您應該考慮用戶看到數據庫特定代碼的重要性 - 通常這對用戶來說不感興趣。 –

+0

如果你的意思是在輸入的時候,然後開始插入你使用SCOPE_IDENTITY捕獲新的身份值的記錄 –

0

爲什麼要把顯示剛剛設置主鍵列的條目數量顯示爲Identity(1,1),這會在每次插入新行時將該列值增加1。這就是「n」號用戶將能夠同時進行輸入。

+0

但是如果我不想使用IDENTITY呢?有沒有其他解決方案呢?我需要顯示RecordNo在進入時。 – Hemal

+0

@Hemal爲什麼你不想使用IDENTITY?即使在同時更新的情況下,這也是唯一的保證,這是您的情況。 –

+0

@Vipin,我想避免IDENTITY,因爲我需要在新輸入時在網頁上顯示新的RecordNo,以便用戶可以識別他正在輸入的記錄。有沒有解決這個問題的方法? – Hemal

0

設置一個標識Cloumn爲:

RecordNo int Identity(1,1) Primary Key 

在Identity(1,1)第一個1被初始值和其他是增量值。

使用下面的代碼,如果你不想使用Identity:

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY RecordNo ASC) AS RecordNumber, 
FirstName,LastName,Address,City,Mobile from yourTableName) AS RecordNo 
+0

但是如果我不想使用IDENTITY呢?還有其他解決方案嗎?我需要在輸入時顯示RecordNo。 – Hemal

+0

如果您不想使用身份,請參閱已更新的答案 – Sobhan

相關問題