В данной статье рассматриваются способы получения
значение столбца идентификаторов из базы данных 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 и создайте таблицу с
Столбец идентификаторов, выполните следующие действия:
- Запустите Microsoft Visual Studio.NET 2002.
- На Файл Выберите пунктНовый, а затем нажмите кнопку Проект.
- В группе Типы проектов, нажмите кнопку Visual
Основные проекты. В группе Шаблоны раздел, нажмите кнопкуКонсольное приложение. По умолчанию используется модуль Module1.vb
создан.
- Имя проекта MyJetApplication и выберите команду ОК.
- Замените существующий код следующим кодом:
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
- Измените имя источника данных в строку подключения
Укажите базу данных Access.
Значение столбца идентификаторов при треппинге
В итоге действия в
RowUpdated события DataAdapter, можно выполнить треппинг значение столбца идентификаторов
который создается для столбца таблицы в базе данных Microsoft Access. В
RowUpdated событие, будет выполняться
SELECT @@ IDENTITY запрос с использованием другой
Команда Объект, а затем присвоит значение, возвращенное
запрос для столбца идентификаторов. Наконец, вызов
Метод AcceptChanges метод
Объект DataRow Объект, который принимает значения столбцов.
Ловушки
столбец идентификаторов значений, выполните следующие действия:
- Добавьте следующий код перед Основной метод для создания второго Объект OleDbCommand объект для SELECT @@ IDENTITY запрос:
' Create OleDbCommand for SELECT @@IDENTITY statement
Private cmdGetIdentity As OleDbCommand
- Добавьте следующий код для Основной метод создания нового экземпляра Объект OleDbCommand класс:
' Create another command to get IDENTITY value.
cmdGetIdentity = New OleDbCommand()
cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
cmdGetIdentity.Connection = cnJetDB
- Добавьте следующий код для Основной метод для обработки RowUpdated событие:
' Delegate for handling RowUpdated event.
AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated - Добавьте следующий код для Основной метод для обновления данных. В RowUpdated событие вызывается после вызова метода Обновление метод.
' Update the Data
oleDa.Update(dtTest)
- Добавьте следующий код для Основной метод перетаскивания 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 - Добавьте следующие строки 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
- На Отладка меню, нажмите кнопкуНачало для запуска приложения. Значения столбца идентификаторов
отображается в окне вывода.
Полный пример кода
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
(http://support.microsoft.com/kb/232144/EN-US/
)
ИНФОРМАЦИЯ: Jet OLE DB Provider версии
4.0 Поддерживает выбор @@ Identity
Для получения дополнительных сведений посетите следующий веб-узла MSDN
веб-узел:
Код статьи: 815629 - Последнее изменение :: 14 июня 2011 г. - Редакция: 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
(http://support.microsoft.com/kb/815629/en-us/
)