ПРАКТИЧЕСКОЕ руководство: Извлечь значение идентификатора при вставке записи в базу данных Access С помощью Visual Basic.NET

Переводы статьи Переводы статьи
Код статьи: 815629 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье рассматриваются способы получения значение столбца идентификаторов из базы данных Microsoft Access.

Извлечение Значение идентификатора из базы данных Jet отличается от SQL Server Поскольку база данных Jet не поддерживает команды из нескольких пакетов. Jet Поддерживает поставщик OLE DB версии 4.0 SELECT @@ Identity запрос, который позволяет извлекать значения автоприращения поле, которое создается на подключение. Для запуска SELECT @@ Identity запрос, рекомендуется использовать другой Объект OleDbCommand объект. В данной статье описывается использование секунды Объект OleDbCommand для извлечения значения столбца идентификаторов.

Примечание: Эта функция работает только с базами данных Microsoft Jet OLEDB 4.0. Ранние версии Microsoft Jet OLEDB не поддерживают такую возможность функция.

Дополнительная информация

Подключение к базе данных Access

Чтобы подключиться к базе данных Access и создайте таблицу с Столбец идентификаторов, выполните следующие действия:
  1. Запустите Microsoft Visual Studio.NET 2002.
  2. На Файл Выберите пунктНовый, а затем нажмите кнопку Проект.
  3. В группе Типы проектов, нажмите кнопку Visual Основные проекты. В группе Шаблоны раздел, нажмите кнопкуКонсольное приложение. По умолчанию используется модуль Module1.vb создан.
  4. Имя проекта MyJetApplication и выберите команду ОК.
  5. Замените существующий код следующим кодом:
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    
    Module 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 Sub
    
    End Module
    
  6. Измените имя источника данных в строку подключения Укажите базу данных Access.




Значение столбца идентификаторов при треппинге

В итоге действия в RowUpdated события DataAdapter, можно выполнить треппинг значение столбца идентификаторов который создается для столбца таблицы в базе данных Microsoft Access. В RowUpdated событие, будет выполняться SELECT @@ IDENTITY запрос с использованием другой Команда Объект, а затем присвоит значение, возвращенное запрос для столбца идентификаторов. Наконец, вызов Метод AcceptChanges метод Объект DataRow Объект, который принимает значения столбцов.

Ловушки столбец идентификаторов значений, выполните следующие действия:
  1. Добавьте следующий код перед Основной метод для создания второго Объект OleDbCommand объект для SELECT @@ IDENTITY запрос:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. Добавьте следующий код для Основной метод создания нового экземпляра Объект OleDbCommand класс:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. Добавьте следующий код для Основной метод для обработки RowUpdated событие:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Добавьте следующий код для Основной метод для обновления данных. В RowUpdated событие вызывается после вызова метода Обновление метод.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. Добавьте следующий код для Основной метод перетаскивания 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. На Отладка меню, нажмите кнопкуНачало для запуска приложения. Значения столбца идентификаторов отображается в окне вывода.


Полный пример кода

Imports System
Imports System.Data
Imports System.Data.OleDb

Module 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 Sub
End Module

Ссылки

Для получения дополнительных сведений о соответствующий раздел в Visual Basic 6.0, щелкните следующий номер статьи для просмотра в статье базы знаний Майкрософт:
232144ИНФОРМАЦИЯ: Jet OLE DB Provider версии 4.0 Поддерживает выбор @@ Identity
Для получения дополнительных сведений посетите следующий веб-узла MSDN веб-узел:
OleDbDataAdapter.RowUpdated событий
http://msdn2.Microsoft.com/en-us/library/System.Data.OleDb.OleDbDataAdapter.RowUpdated (vs.71) .aspx

Свойства

Код статьи: 815629 - Последний отзыв: 14 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Ключевые слова: 
kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:815629

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com