Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

Cómo: Recuperar el valor de identidad al insertar registros en la base de datos de Access utilizando Visual Basic .NET

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 815629
Para obtener una versión de Microsoft Visual C# .NET de este artículo, consulte 816112.

En esta tarea

Resumen
Este artículo paso a paso describe cómo recuperar el valor de columna de identidad de una base de datos de Access.

Recuperar el valor de identidad de una base de datos Jet es distinto de SQL Server, porque una base de datos Jet no admite comandos por lotes múltiples instrucciones. La versión de OLE DB de Jet 4.0 proveedor admite la consulta SELECT @@ Identity que permite recuperar el valor del campo de incremento automático que se genera en la conexión. Para ejecutar la consulta SELECT @@ Identity , se recomienda que utilice otro objeto OleDbCommand . En este artículo se describe cómo utilizar un segundo OleDbCommand para recuperar el valor de columna de identidad.

Nota: Esta característica sólo funciona con bases de datos OLEDB de Microsoft Jet 4.0. Las versiones anteriores de OLEDB de Microsoft Jet no admiten esta característica.

back to the top
Más información

Conectarse a la base de datos Access

Para conectarse a la base de datos de Access y crear una tabla con la columna de identidad, siga estos pasos:
  1. Inicie Microsoft Visual Studio .NET 2002.
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
  3. En Tipos de proyecto , haga clic en Proyectos de Visual Basic . En la sección plantillas , haga clic en Aplicación de consola . De forma predeterminada, se crea Module1.vb.
  4. Denomine el proyecto MyJetApplication y haga clic en Aceptar .
  5. Reemplace el código existente con el código siguiente:
    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. Modifique el nombre origen de datos en para que señale a la base de datos Access la cadena de conexión.


back to the top

Captura el valor de columna de identidad

Para resumir los pasos, en el evento RowUpdated del DataAdapter, puede interceptar el valor de columna de identidad que se genera para una columna de una tabla en una base de datos de Access. En el evento RowUpdated , se ejecutará la consulta SELECT @@ IDENTITY mediante otro objeto de comando y, a continuación, se asignará el valor devuelto por la consulta a la columna de identidad. Por último, llame al método AcceptChanges del objeto DataRow para aceptar el valor de la columna.

La captura el valor de columna de identidad, siga estos pasos:
  1. Agregue el código siguiente antes del método Main para crear un segundo objeto OleDbCommand para la consulta SELECT @@ IDENTITY :
       ' Create OleDbCommand for SELECT @@IDENTITY statement   Private cmdGetIdentity As OleDbCommand
  2. Anexe el código siguiente al método Main para crear una nueva instancia de clase OleDbCommand :
          ' Create another command to get IDENTITY value.      cmdGetIdentity = New OleDbCommand()      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"      cmdGetIdentity.Connection = cnJetDB
  3. Anexe el código siguiente al método Main para controlar el evento RowUpdated :
          ' Delegate for handling RowUpdated event.      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Anexe el código siguiente al método principal para actualizar los datos. El evento RowUpdated se produce después de llamar al método Update .
          ' Update the Data      oleDa.Update(dtTest)
  5. Anexe el código siguiente al método principal para eliminar la tabla AutoIncrementTest y liberar los recursos:
          ' 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. Agregue el código de controlador de evento RowUpdated siguiente al 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. En el menú Depurar , haga clic en iniciar para ejecutar la aplicación. Los valores de columna de identidad se muestran en la ventana Resultados.
back to the top

Lista de código completa

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
Referencias
Para obtener información adicional acerca de un tema relacionado en Visual Basic 6.0, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
232144INFORMACIÓN: Jet OLE DB Provider versión 4.0 admite SELECT @@ Identity
Para obtener más información, visite el siguiente sitio Web MSDN:back to the top

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 815629 - Última revisión: 05/12/2007 06:27:53 - Revisión: 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 KbMtes
Comentarios
e; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">=">: language in languagesListForLargeScreens track by $index -->
España - Español
Paraguay - Español
Venezuela - Español
://c1.microsoft.com/c.gif?DI=4050&did=1&t=">ment.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> >ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>"); t=">