我正在尝试从数据库中获取最后插入的id。我尝试了很多不同的代码片段,但仍然没有运气。这是我用于插入的代码。我需要第一个插入id作为第二个插入nId。我已经尝试过SELECT @@ IDENTITY但是出现了我无法找到的null值错误。有人能告诉我正确的代码吗?
// Insert new user
daUsers.Insert(textBoxUsername.Text, textBoxPassword.Text);
// Insert new Twitter OAuth
daTwitterOAuth.Insert(nId, textBoxConsumerKey.Text, textBoxConsumerSecret.Text, textBoxToken.Text, textBoxTokenSecret.Text);
答案 0 :(得分:1)
如果您尝试添加新记录,则应该调用TableAdapter.Insert,而不是TableAdapter.Update 您无法为数据库创建第二个命令并使用@@ IDENTITY来获取先前生成的ID ...这必须在同一会话中返回,否则SQL将不知道您期望哪个ID接收。 如果将表适配器的执行模式设置为标量,则ID将是方法调用的返回值。有关您遇到的同一问题,请参阅this Question和答案。
答案 1 :(得分:0)
有人提到@@Identity
这很好,但是如果其他人在SQL
到达该行之前在其他地方执行插入操作会怎么样?
我会这样做。
Create Procedure [Proc]
@Id as int output = 0
as
Insert into Table
Select * from AnotherTable
SET @Id = (SELECT Scope_Identity)
然后在.NET
中添加输出参数。
答案 2 :(得分:0)
已经去过了!在上面的代码中,我使用的是insert方法,将执行模式更改为标量,这是我的sql:
INSERT INTO [dbTblUsers]([strUsername], [strPassword])
VALUES (@p1,@p2);
SELECT @@IDENTITY;
如何将@@ identity转换为int?喜欢这个?
nId = (int)daUsers.InsertQuery(textBoxUsername.Text, textBoxPassword.Text);