2013-02-08 66 views
0

我想從數據庫中取出最後一個插入的ID。我已經嘗試了許多不同的代碼片段,但仍然沒有運氣。以下是我用於插入的代碼。我需要第一個插入ID作爲nId插入第二個。我試過SELECT @@ IDENTITY,但出現了無法找到的空值錯誤。任何人都可以告訴我正確的代碼嗎?c#使用表格適配器的最後一個插入ID

// Insert new user 
daUsers.Insert(textBoxUsername.Text, textBoxPassword.Text); 

// Insert new Twitter OAuth 
daTwitterOAuth.Insert(nId, textBoxConsumerKey.Text, textBoxConsumerSecret.Text, textBoxToken.Text, textBoxTokenSecret.Text); 

回答

1

如果你想添加一個新的記錄,你應該叫TableAdapter.Insert,不TableAdapter.Update 你不能到數據庫創建第二個命令,並使用@@ IDENTITY找回先前生成的ID ...這必須在同一個會話中返回,否則SQL將不知道您期望接收哪個ID。 如果您將表適配器的執行模式設置爲標量,則該ID將成爲方法調用的返回值。請參閱thisQuestion並回答您遇到的同一問題。

+0

已經在那裏!另外,在上述我使用的插入方法的代碼,改變了執行模式,以標量,這是我的SQL: INSERT INTO [dbTblUsers]([strUserName中],[strPassword]) VALUES(@ P1,P2 @) ; SELECT @@ IDENTITY; 如何將@@標識轉換爲int?喜歡這個? nId =(int)daUsers.InsertQuery(textBoxUsername.Text,textBoxPassword.Text); – luigivampa 2013-02-08 14:20:21

0

有人提到了@@Identity這很好,但如果其他人在你到達SQL的那條線之前在其他地方執行了插入操作?

我會這樣做。

Create Procedure [Proc] 

@Id as int output = 0 

as 

Insert into Table 
Select * from AnotherTable 

SET @Id = (SELECT Scope_Identity) 

然後在.NET添加您的輸出參數。

0

已經在那裏!在上面我使用的插入方法的代碼,改變了運行模式,以標,這是我的SQL:

INSERT INTO [dbTblUsers]([strUsername], [strPassword]) 
VALUES (@p1,@p2); 
SELECT @@IDENTITY; 

如何投@@身份進入一個int?喜歡這個?

nId = (int)daUsers.InsertQuery(textBoxUsername.Text, textBoxPassword.Text);