您目前已離線,請等候您的網際網路重新連線

如何: 資料錄插入使用 Visual Basic.NET 的 Access 資料庫時擷取的識別值

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:815629
本文章的有 Microsoft Visual C#.NET] 版本請參閱 816112

在此工作

結論
本文將逐步討論如何從 Access 資料庫中擷取的識別資料行值。

從 Jet 資料庫擷取識別值是 SQL Server 的不同,因為 Jet 資料庫不支援多陳述式的批次命令。Jet OLE DB 版本 4.0 的提供者支援 SELECT @ @ 識別 查詢可讓您擷取產生於您的連線的 [自動遞增值] 欄位的值。若要執行 SELECT @ @ 識別 查詢,建議您使用另一個 OleDbCommand 物件。本文將告訴您,如何使用第二個 OleDbCommand 擷取識別資料行值。

附註:這項功能會只使用 Microsoft Jet OLEDB 4.0 資料庫。 較早版本的 Microsoft Jet OLEDB 並不支援此功能。

back to the top
其他相關資訊

連接到 Access 資料庫

連接到 Access 資料庫和建立識別資料行的資料表,請依照下列步驟執行:
  1. 啟動 Microsoft Visual Studio.NET 2002年。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 按一下 [專案類型,] 下的 [Visual Basic 專案]。在 [範本] 區段按一下 [主控台應用程式]。根據預設值,Module1.vb,即建立。
  4. 專案 MyJetApplication 的名稱,然後按一下 [確定]
  5. 現有的程式碼取代下列程式碼:
    Imports SystemImports System.DataImports System.Data.OleDbModule Module1   Sub Main()      ' Open Connection       Dim cnJetDB As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourAccessDatabase")      cnJetDB.Open()      ' If the test table does not exist, create the Table.      Dim strSQL As String      strSQL = "CREATE TABLE AutoIncrementTest " & _               "(ID int identity, Description varchar(40), " & _               "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"      ' Command for creating Table.      Dim cmdJetDB As New OleDbCommand(strSQL, cnJetDB)      cmdJetDB.ExecuteNonQuery()      ' Create a DataAdaptor With Insert Command For inserting records      Dim oleDa As New OleDbDataAdapter("Select * from AutoIncrementTest", cnJetDB)      ' Command to Insert Records.      Dim cmdInsert As New OleDbCommand()      cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"      cmdInsert.Connection = cnJetDB      cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))      oleDa.InsertCommand = cmdInsert      ' Create a DataTable      Dim dtTest As New DataTable()      oleDa.Fill(dtTest)      Dim drTest As DataRow      ' Add Rows to the Table      drTest = dtTest.NewRow      drTest("Description") = "This is a Test Row 1"      dtTest.Rows.Add(drTest)      drTest = dtTest.NewRow      drTest("Description") = "This is a Test Row 2"      dtTest.Rows.Add(drTest)         End SubEnd Module
  6. 修改連接字串以指向 Access 資料庫中的資料來源名稱。


back to the top

設陷識別資料行值

合併彙算之步驟的資料配接器 RowUpdated 事件中補漏白為 Access 資料庫中資料表的資料行產生識別資料行值]。RowUpdated] 事件中您將使用其他的 命令 物件執行 SELECT @ @ IDENTITY 查詢並且當然後您會指派到識別資料行查詢所傳回的值。最後,呼叫 DataRow 物件以接受資料行值的 AcceptChanges 方法。

設陷識別資料行值請依照下列步驟執行:
  1. 加入下列程式碼之前 Main 方法,以建立第二個 OleDbCommand 物件為 SELECT @ @ IDENTITY 查詢:
       ' Create OleDbCommand for SELECT @@IDENTITY statement   Private cmdGetIdentity As OleDbCommand
  2. 將下列程式碼附加到 Main 方法,用於建立 OleDbCommand 類別的新執行個體:
          ' Create another command to get IDENTITY value.      cmdGetIdentity = New OleDbCommand()      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"      cmdGetIdentity.Connection = cnJetDB
  3. 將下列程式碼附加至處理 RowUpdated 事件的 Main 方法:
          ' Delegate for handling RowUpdated event.      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. 將下列程式碼附加到 Main 方法來更新資料。在呼叫 Update 方法之後,就會引發 RowUpdated 事件。
          ' Update the Data      oleDa.Update(dtTest)
  5. 將下列程式碼附加到 Main 方法,來卸除 AutoIncrementTest 資料表,並釋出資源:
          ' Drop the table      cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest"      cmdJetDB.ExecuteNonQuery()      ' Release the resources.      cmdGetIdentity.Dispose()      cmdGetIdentity = Nothing      cmdInsert.Dispose()      cmdInsert = Nothing      cmdJetDB.Dispose()      cmdJetDB = Nothing      cnJetDB.Close()      cnJetDB.Dispose()      cnJetDB = Nothing
  6. 將下列 RowUpdated 事件處理常式程式碼加入 Module1 中:
       ' Event handler for RowUpdated event.   Private Sub HandleRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)      If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then         ' Get the Identity column value         e.Row("ID") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())         Debug.WriteLine(e.Row("ID"))         e.Row.AcceptChanges()      End If   End Sub
  7. 在 [偵錯] 功能表上按一下 [開始] 執行應用程式]。識別資料行值會顯示在 [輸出] 視窗中。
back to the top

完成程式碼清單

Imports SystemImports System.DataImports System.Data.OleDbModule Module1   ' Create OleDbCommand for SELECT @@IDENTITY statement   Private cmdGetIdentity As OleDbCommand   Sub Main()      ' Open Connection       Dim cnJetDB As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourAccessDatabase")      cnJetDB.Open()      ' If the test table does not exist then create the Table      Dim strSQL As String      strSQL = "CREATE TABLE AutoIncrementTest " & _               "(ID int identity, Description varchar(40), " & _               "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"      ' Command for Creating Table      Dim cmdJetDB As New OleDbCommand(strSQL, cnJetDB)      cmdJetDB.ExecuteNonQuery()      ' Create a DataAdaptor With Insert Command For inserting records      Dim oleDa As New OleDbDataAdapter("Select * from AutoIncrementTest", cnJetDB)      ' Command to Insert Records      Dim cmdInsert As New OleDbCommand()      cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"      cmdInsert.Connection = cnJetDB      cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))      oleDa.InsertCommand = cmdInsert      ' Create a DataTable      Dim dtTest As New DataTable()      oleDa.Fill(dtTest)      Dim drTest As DataRow      ' Add Rows to the Table      drTest = dtTest.NewRow      drTest("Description") = "This is a Test Row 1"      dtTest.Rows.Add(drTest)      drTest = dtTest.NewRow      drTest("Description") = "This is a Test Row 2"      dtTest.Rows.Add(drTest)      ' Create another Command to get IDENTITY Value      cmdGetIdentity = New OleDbCommand()      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"      cmdGetIdentity.Connection = cnJetDB      ' Delegate for Handling RowUpdated event      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated      ' Update the Data      oleDa.Update(dtTest)      ' Drop the table      cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest"      cmdJetDB.ExecuteNonQuery()      ' Release the Resources      cmdGetIdentity.Dispose()      cmdGetIdentity = Nothing      cmdInsert.Dispose()      cmdInsert = Nothing      cmdJetDB.Dispose()      cmdJetDB = Nothing      cnJetDB.Close()      cnJetDB.Dispose()      cnJetDB = Nothing   End Sub   ' Event Handler for RowUpdated Event   Private Sub HandleRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)      If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then         ' Get the Identity column value         e.Row("ID") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())         Debug.WriteLine(e.Row("ID"))         e.Row.AcceptChanges()      End If   End SubEnd Module
参考
如 Visual Basic 6.0 中的相關主題的其他有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
2321444.0 支援 SELECT @ @ 識別資訊: Jet OLE DB 提供者版本
如需詳細資訊請造訪下列 MSDN 網站]:back to the top

警告:本文為自動翻譯

內容

文章識別碼:815629 - 最後檢閱時間:05/12/2007 06:27:53 - 修訂: 3.2

Microsoft ADO.NET 1.0, Microsoft ADO.NET 1.1, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition

  • kbmt kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster KB815629 KbMtzh
意見反應