0
MS-Access數據庫訪問 - 插入
Table: myTable
Field1: ID (COUNTER, which is autoincrement in Access)
Field2: SURNAME (VARCHAR)
Field3: NAME (VARCHAR)
中獲取計數器(自動遞增主鍵)我想獲得ID回來,每當我插入一行。有沒有辦法? (我使用VB.Net)
編輯: 解決方案使用SELECT @@ 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
感謝。發表了一個完整的解決方案,使用你的答案 – 2011-03-03 10:15:47
我想知道。是否有可能在'INSERT'和'SELECT @@ IDENTITY'之間發生第二次插入從另一個用戶發生,這與我從'SELECT @@ IDENTITY'中獲得的ID相混淆,因爲數據庫被許多用戶使用? – 2011-03-03 10:25:31
每個連接都維護@@ IDENTITY,因此,不,在您的代碼中這是不可能的。但是,需要注意的一點是:A2010增加了觸發器(表級數據宏)的等價功能,如果您的第一條語句導致記錄被插入到具有自動編號的另一個表中,您可能會得到錯誤的答案(我不知道你是否做)。在SQL Server中,你有Scope_Identity()來處理這個問題,但據我所知,A2010並沒有解決這個潛在的問題(可能是因爲它不存在)。 – 2011-03-04 04:14:48