Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Access-插入期间获取计数器(自动递增主键)_Vb.net_Ms Access_Primary Key_Auto Increment - Fatal编程技术网

Vb.net 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

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 (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年并未解决该潜在问题(可能是因为它不存在)。