2011-03-02 75 views
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 

回答

2
+0

感謝。發表了一個完整的解決方案,使用你的答案 – 2011-03-03 10:15:47

+0

我想知道。是否有可能在'INSERT'和'SELECT @@ IDENTITY'之間發生第二次插入從另一個用戶發生,這與我從'SELECT @@ IDENTITY'中獲得的ID相混淆,因爲數據庫被許多用戶使用? – 2011-03-03 10:25:31

+1

每個連接都維護@@ IDENTITY,因此,不,在您的代碼中這是不可能的。但是,需要注意的一點是:A2010增加了觸發器(表級數據宏)的等價功能,如果您的第一條語句導致記錄被插入到具有自動編號的另一個表中,您可能會得到錯誤的答案(我不知道你是否做)。在SQL Server中,你有Scope_Identity()來處理這個問題,但據我所知,A2010並沒有解決這個潛在的問題(可能是因爲它不存在)。 – 2011-03-04 04:14:48