0

我正在尝试从数据库中获取最后插入的 id。我尝试了许多不同的代码片段,但仍然没有运气。这是我用于插入的代码。我需要第一个中的最后一个插入 id 在第二个中插入为 nId。我试过 SELECT @@IDENTITY 但出现了我找不到的空值错误。任何人都可以告诉我正确的代码吗?

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

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

3 回答 3

1

如果您尝试添加新记录,则应该调用 TableAdapter.Insert,而不是 TableAdapter.Update 您不能对数据库创建第二个命令并使用 @@IDENTITY 取回之前生成的 ID。 . 这必须在同一个会话中返回,否则 SQL 将不知道您希望收到哪个 ID。如果将表适配器的执行模式设置为标量,则 ID 将是方法调用的返回值。请在您遇到的同一问题上查看 问答。

于 2013-02-08T14:08:30.677 回答
0

有人提到@@Identity这很好,但是如果其他人在您到达该行之前在其他地方执行插入SQL呢?

我会这样做。

Create Procedure [Proc]

@Id as int output = 0

as

Insert into Table
Select * from AnotherTable

SET @Id = (SELECT Scope_Identity)

然后.NET添加您的输出参数。

于 2013-02-08T14:15:37.460 回答
0

已经去过了!在上面的代码中,我使用了插入方法,将执行模式更改为标量,这是我的 sql:

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

如何将@@identity 转换为int?像这样?

nId = (int)daUsers.InsertQuery(textBoxUsername.Text, textBoxPassword.Text);
于 2013-02-08T14:44:04.593 回答