Al momento sei offline in attesa che la connessione Internet venga ristabilita

Procedura: Recuperare il valore di identità durante l'inserimento di record nel Database Access utilizzando Visual Basic .NET

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 815629
Per la una versione di Microsoft Visual C# .NET di questo articolo, vedere 816112.

Contenuto dell'attività

Sommario
In questo articolo viene illustrato come recuperare il valore di colonna identità da un database di Access.

Recuperare il valore di identità di un database Jet è diverso da di SQL Server, in quanto un database Jet non supporta i comandi batch con più istruzioni. La versione di OLE DB Jet 4.0 provider supporta la query SELECT @@ IDENTITY che consente di recuperare il valore del campo incremento automatico che viene generato per la connessione. Per eseguire la query SELECT @@ IDENTITY , è consigliabile utilizzare un altro oggetto OleDbCommand . In questo articolo viene descritto come utilizzare un secondo OleDbCommand per recuperare il valore della colonna Identity.

Nota: Questa funzionalità funziona solo con database Microsoft Jet 4.0 OLE DB. Questa funzionalità non sono supportata in versioni precedenti di Microsoft Jet OLEDB.

back to the top
Informazioni

Connettersi al Database Access

Per connettersi al database di Access e creare una tabella con la colonna Identity, attenersi alla seguente procedura:
  1. Avviare Microsoft Visual Studio .NET 2002.
  2. Scegliere Nuovo dal menu file , quindi progetto .
  3. In Tipi progetto fare clic su Progetti di Visual Basic . Nella sezione modelli fare clic su Applicazione Console . Per impostazione predefinita, viene creato Module1.vb.
  4. Denominare il progetto MyJetApplication e scegliere OK .
  5. Sostituire il codice esistente con il codice riportato di seguito:
    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. Modificare il nome origine dati nella stringa di connessione per puntare il database di Access.


back to the top

Registrare il valore della colonna di identità

Per riepilogare i passaggi, l'evento RowUpdated di DataAdapter, è possibile intercettare il valore di colonna di identità che viene generato per una colonna di una tabella in un database di Access. Nell'evento RowUpdated , si verrà esegue la query SELECT @@ IDENTITY utilizzando un altro oggetto Command e quindi si assegna il valore restituito dalla query alla colonna Identity. Infine, chiamare il metodo di AcceptChanges dell'oggetto DataRow per accettare il valore della colonna.

Eseguire la procedura seguente le trap, il valore della colonna di identità:
  1. Aggiungere il codice riportato di seguito prima il metodo Main per creare un secondo oggetto OleDbCommand per la query SELECT @@ IDENTITY :
       ' Create OleDbCommand for SELECT @@IDENTITY statement   Private cmdGetIdentity As OleDbCommand
  2. Aggiunge il seguente codice al metodo Main per la creazione di una nuova istanza della classe OleDbCommand :
          ' Create another command to get IDENTITY value.      cmdGetIdentity = New OleDbCommand()      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"      cmdGetIdentity.Connection = cnJetDB
  3. Aggiunge il seguente codice al metodo Main per la gestione dell'evento RowUpdated :
          ' Delegate for handling RowUpdated event.      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Aggiunge il seguente codice al metodo principale per l'aggiornamento dei dati. L'evento RowUpdated viene generato dopo la chiamata al metodo Update .
          ' Update the Data      oleDa.Update(dtTest)
  5. Aggiunge il seguente codice al metodo Main per eliminare la tabella AutoIncrementTest e rilasciare le risorse:
          ' 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. Aggiungere il seguente codice di gestore eventi 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. Dal menu debug , scegliere Avvia per eseguire l'applicazione. Valori di colonna di identità vengono visualizzati nella finestra di output.
back to the top

Elenco completo del codice

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
Riferimenti
Per ulteriori informazioni su un argomento correlato in Visual Basic 6.0, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
232144INFORMAZIONI: Jet OLE DB Provider versione 4.0 supporta SELECT @@ IDENTITY
Per ulteriori informazioni, visitare il seguente sito Web MSDN:back to the top

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 815629 - Ultima revisione: 05/12/2007 06:27:53 - Revisione: 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 KbMtit
Feedback
>