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

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 815629
Аннотация
В этой статье обсуждается получение значения столбца идентификаторов из базы данных Access.

Получение значения идентификаторов из базы данных Jet отличается от SQL Server базы данных Jet поддерживает нескольких инструкций пакетные команды. OLE DB для Jet версии 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. В области Типы проектоввыберите Проекты VisualBasic. В разделе Шаблоны щелкнитеКонсольное приложение. По умолчанию модуль Module1.vb iscreated.
  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. Измените имя источника данных в topoint строку подключения к базе данных Access.


к началу статьи

Получение значения столбца идентификатора

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

Ловушки значение столбца идентификаторов, выполните следующие действия.
  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. Добавьте следующий код в метод Main для обработки события RowUpdated :
          ' Delegate for handling RowUpdated event.      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Добавьте следующий код в метод Main для обновления данных. Событие RowUpdated возникает после вызова метода Update .
          ' 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. В меню Отладка нажмите кнопкуПуск для запуска приложения. Отображаются значения столбца идентификаторов в окне вывода.
к началу статьи

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

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 щелкните следующий номер статьи базы знаний Майкрософт:
232144 ИНФОРМАЦИЯ: Jet OLE DB поставщик версии 4.0 поддерживает выбор @@Identity
Для получения дополнительных сведений посетите веб-узле MSDN:к началу статьи

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 815629 — последний просмотр: 07/25/2015 15:06:00 — редакция: 5.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
Отзывы и предложения