2011-06-14 96 views
0

需要建議什麼是最好的方法來讓自動遞增的ID在多個表單上相同。通過多種形式傳遞自動遞增的ID

基本上我使用VB.Net與SQL Server作爲後端。我寫了幾個存儲過程來插入數據,然後我調用前端的存儲過程。我有3個表單,一旦提交了第一個表單,它就生成一個autoID,然後將用戶轉到第二個表單。

在第二種形式中,我有一個單獨的插入存儲過程是否有一種方法來獲取第一個窗體生成的id並使其一致。或者我應該在提交表單後將其存儲在一個變量中,然後以第二種形式進行調用。

我閱讀了關於@@Identity,但只抓取該會話中的id,因爲我提交的第一個表格數據,然後去第二個會不會是一個不同的會話。

感謝

+1

爲此目的不要使用@@標識,這是不可靠的。請改用scope_identity()或output子句。 – HLGEM 2011-06-14 14:59:13

回答

0

你的存儲過程可以返回的標識值(使用輸出條款或SCOPE_IDENTITY()來得到它),爲你存儲在你的應用程序中的變量輸出變量,那麼這將是可以使用。當人移動到不同的記錄時,並且在所有相關的formas插入記錄後,您都會希望確保清空該變量,以便您不會在其他時間無意中使用它。

您不希望永遠使用@@ identity,因爲它不可靠,並且可能會產生大量的數據完整性問題,因爲如果有人添加一個觸發器插入到具有標識的另一個表中,它會給您錯誤的值。

+0

我試圖做的是將這行代碼添加到我的存儲過程SELECT id從mytable id = @id但是然後我無法弄清楚如何讓它在前端工作,因爲沒有id參數傳遞它。你是說我應該添加id = @@ scope_identity()到存儲過程,它會知道從mytable中獲取它 – Tim 2011-06-14 15:28:15

0

,這是導致您的問題可能是一個指示,這是不是做到這一點的最好辦法的事實。也許相反,使用DB上的函數返回ID,然後將其設置在.NET代碼中?

如果您有一個自動遞增的ID,那麼它應該只在創建記錄時遞增。你的三個表格是否創建三條記錄?那是你要的嗎?如果是這樣,那麼一個自動ID肯定不是正確的路要走。

+0

我有3個不同的表格。第一種形式提交給一個生成自動識別的表格。第二個表單提交到第二個表格是我想要在第一個表格中生成的自動識別號碼,並將其添加到第二個表格中。但第二種形式是一種全新的形式抱歉,如果我沒有解釋清楚 – Tim 2011-06-14 14:56:19

0

我想也許你在想這個?

我讀到了@@身份,但只有抓住該會話中的ID,因爲我提交第一形式的數據然後轉到第二那不是一個不同的會話。

難道你不想讓在第一個表單上生成的條目生成密鑰嗎?

在第二種形式中我有存儲過程的一個單獨的插入是有辦法搶第一形式產生 id和爲它是一致的。或者我應該在提交表單後將其存儲在一個變量中,然後以第二種形式進行調用。

+0

你可能是正確的我仍然在學習VB,我發現自己在思考更多的東西,因爲我還沒有完全掌握我到底做了什麼,但是我正在閱讀並試圖理解我在做什麼,所以我可以成爲一個更好的編程。只是我越讀有時我讀的東西讓我更困惑 – Tim 2011-06-14 17:15:43

+0

我確實想獲得由第一個窗體生成的關鍵字,除非我把我的存儲過程@id = scope_identity()我不知道如何在vb中通過將其生成爲第二種形式。我正在閱讀有關全局變量的正確方法嗎?當用戶點擊提交按鈕時,創建一個全局變量並將其傳遞給第二個窗體 – Tim 2011-06-14 17:18:03

+0

對不起,不太瞭解VB來回答這個問題。在C#中有用於執行存儲過程的meathods,它返回一個數據表。在你存儲proc後,插入說選擇@@身份。然後在C#中你會有類似result.rows [0] [0]的東西。 – TizzyFoe 2011-06-14 17:32:23