2013-02-08 68 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); 
相关问题