【发布时间】:2018-09-14 21:41:48
【问题描述】:
我在 SQL Server 2012 中使用此代码:
INSERT INTO [dbo].[test] ([t])
VALUES ('tyy');
SELECT [Id]
FROM [dbo].[test]
WHERE ([Id] = SCOPE_IDENTITY())
它返回最后插入的 id 并且运行良好。
但是 vb.net 2017 和 .net Framework 4.7.2 中的相同代码不起作用 - 对于每个插入,它返回 1。
这是代码:
Dim id = TestTableAdapter.InsertQuery("nvnh")
表:
CREATE TABLE [dbo].[test]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[t] NVARCHAR (50) NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ([Id] ASC)
);
【问题讨论】:
-
您确定前一个插入与您在 VB.net 代码中的第二个插入在同一范围内运行吗?
-
您可以简单地使用 SELECT SCOPE_IDENTITY() 而不是您的 select...from...where
-
什么是
TestTableAdapter.InsertQuery?您确定它返回的是结果集而不是受影响的行数吗? -
感谢重播,是的,我确定在保存范围内,我使用的 SELECT SCOPE_IDENTITY() 也在 sql server 中工作,但在 vb.net 中返回 1,TestTableAdapter.InsertQuery 是查询在数据表中具有相同的代码内部数据集设计器
-
您必须声明一个 SqlTransaction 类型的对象并调用 myConnection.BeginTransaction() 完成您的工作,然后调用 myTrans.Commit();然后关闭 myConnection。
标签: sql-server vb.net scope-identity