Vb.net Access-插入期间获取计数器(自动递增主键)
MS Access数据库Vb.net Access-插入期间获取计数器(自动递增主键),vb.net,ms-access,primary-key,auto-increment,Vb.net,Ms Access,Primary Key,Auto Increment,MS Access数据库 Table: myTable Field1: ID (COUNTER, which is autoincrement in Access) Field2: SURNAME (VARCHAR) Field3: NAME (VARCHAR) 每当我插入一行时,我想返回ID。有办法吗?(我正在使用VB.Net) 编辑: 使用选择@@IDENTITY解决方案 'Execute insert statement and return identity (autoincremen
Table: myTable
Field1: ID (COUNTER, which is autoincrement in Access)
Field2: SURNAME (VARCHAR)
Field3: NAME (VARCHAR)
每当我插入一行时,我想返回ID。有办法吗?(我正在使用VB.Net)
编辑:
使用选择@@IDENTITY解决方案
'Execute insert statement and return identity (autoincrement ID field)
Public Function executeInsertGetIdentity(ByVal insertStatement As String) As Integer
' Execute insert
Dim myOleDbCommand As OleDbCommand
myOleDbCommand = New OleDbCommand(insertStatement, connection)
If myOleDbCommand.ExecuteNonQuery() < 1 Then Return 0
' Return identity
Dim myOleDbCommand2 As OleDbCommand
myOleDbCommand2 = New OleDbCommand("SELECT @@IDENTITY", connection)
Dim myOleDbDataReader As OleDbDataReader = myOleDbCommand.ExecuteReader()
myOleDbDataReader.Read()
executeInsertGetIdentity = myOleDbDataReader.Item(0).ToString()
myOleDbDataReader.Close()
End Function
执行insert语句并返回标识(自动增量ID字段)
作为整数的公共函数executeInsertGetIdentity(ByVal insertStatement作为字符串)
'执行插入
暗myOleDbCommand作为OleDbCommand
myOleDbCommand=新的OleDbCommand(insertStatement,connection)
如果myOleDbCommand.ExecuteOnQuery()小于1,则返回0
“返回标识”
暗淡的myOleDbCommand2作为OleDbCommand
myOleDbCommand2=新的OleDbCommand(“选择@@IDENTITY”,连接)
Dim myOleDbDataReader作为OleDbDataReader=myOleDbCommand.ExecuteReader()
myOleDbDataReader.Read()
executeInsertGetIdentity=myOleDbDataReader.Item(0.ToString)()
myOleDbDataReader.Close()
端函数
您可以一步一步地使用@@Identity-谢谢。使用您的答案发布了完整的解决方案我很好奇。在“INSERT”和“SELECT@@IDENTITY”之间是否有可能发生另一个用户的第二次插入,这与我从“SELECT@@IDENTITY”中获得的ID有冲突,因为数据库被许多用户使用?@@IDENTITY是按连接维护的,因此,不,在您的代码中是不可能的。但是,有一个警告:A2010增加了触发器(表级数据宏)的等效功能,如果您的第一个语句导致记录插入到另一个带有自动编号的表中,您可能会得到错误的答案(我不知道您是否这样做)。在SQL Server中,您有Scope_Identity()来处理该问题,但据我所知,2010年并未解决该潜在问题(可能是因为它不存在)。