Condividi tramite


Persistenza dei dati

L'elaborazione tramite dispositivi portatili (ad esempio, laptop) ha fatto emergere la necessità di applicazioni che possono essere eseguite sia in uno stato connesso che disconnesso. ADO ha aggiunto il supporto per questa funzionalità, offrendo allo sviluppatore la possibilità di salvare un Recordset di cursore client su disco e ricaricarlo in un secondo momento.

Esistono diversi scenari in cui è possibile usare questo tipo di funzionalità, tra cui:

  • In viaggio: quando si porta l'applicazione in viaggio, è fondamentale fornire la possibilità di apportare modifiche e aggiungere nuovi record. In un secondo momento, questi possono essere riconnessi al database e sottoposti a commit.

  • Ricerche aggiornate raramente: spesso le tabelle all'interno di un'applicazione vengono usate per le ricerche, come ad esempio le tabelle sulle imposte statali. Queste tabelle vengono aggiornate raramente e sono di sola lettura. L'applicazione può semplicemente caricare i dati da un Recordset persistente in locale invece di rileggerli ad ogni avvio.

Per salvare e caricare i Recordset in ADO, è necessario usare i metodi Recordset.Save e Recordset.Open(,,,,adCmdFile) nell'oggetto Recordset.

È possibile usare il metodo Recordset Save per rendere permanente il Recordset ADO in un file su disco. È anche possibile salvare un Recordset in un oggetto Stream ADO. Gli oggetti Stream vengono illustrati più avanti nella guida. In un secondo momento, è possibile usare il metodo Open per riaprire il Recordset quando si è pronti per usarlo. Per impostazione predefinita, ADO salva il Recordset nel formato Microsoft ADTG (Advanced Data TableGram) proprietario. Questo formato binario viene specificato usando il valore adPersistADTG PersistFormatEnum. In alternativa, è possibile scegliere di salvare il Recordset come XML tramite adPersistXML. Per altre informazioni sul salvataggio dei Recordset in formato XML, vedere Persistenza di record in formato XML.

La sintassi del metodo Save è la seguente:

  
recordset.  
Save  
Destination, PersistFormat  
  

La prima volta che si salva il Recordset, è facoltativo specificare il parametro Destinazione. Se si omette Destinazione, verrà creato un nuovo file con un nome impostato sul valore della proprietà Source dell'oggetto Recordset.

Omettere il parametro Destinazione quando si effettua una chiamata al metodo Save dopo il primo salvataggio o si verificherà un errore di run-time. Se successivamente si effettua una chiamata al metodo Save con una nuova Destinazione, Recordset viene salvato nella nuova destinazione. La nuova destinazione e quella originale, tuttavia, saranno entrambe aperte.

L'esecuzione del metodo Save non chiude Recordset o Destinazione, quindi è possibile continuare a usare l'oggetto Recordset e salvare le modifiche più recenti. La Destinazione rimane aperta fino alla chiusura di Recordset. Durante questo periodo, le altre applicazioni possono leggere ma non scrivere in Destinazione.

Per motivi di sicurezza, il metodo Save consente solo l'uso di impostazioni di sicurezza basse e personalizzate da uno script eseguito con Microsoft Internet Explorer.

Se il metodo Save viene chiamato mentre è in corso un'operazione asincrona di recupero, esecuzione o aggiornamento di Recordset, il metodo Save attende il completamento dell'operazione.

I record vengono salvati a partire dalla prima riga del Recordset. Al termine del metodo Save, la posizione della riga corrente viene spostata nella prima riga del Recordset.

Per ottenere risultati ottimali, impostare la proprietà CursorLocation su adUseClient con Save. Se il provider non supporta tutte le funzionalità necessarie per salvare gli oggetti Recordset, Cursor Service fornirà tale funzione.

Quando un Recordset viene reso persistente impostando la proprietà CursorLocation su adUseServer, la funzionalità di aggiornamento dell'oggetto Recordset è limitata. In genere, sono consentiti solo gli aggiornamenti, gli inserimenti e le eliminazioni di una singola tabella (a seconda della funzionalità del provider). Il metodo Resync non è disponibile in questa configurazione.

Poiché il parametro Destinazione può accettare qualsiasi oggetto che supporti l'interfaccia IStream di OLE DB, è possibile salvare un Recordset direttamente nell'oggetto Response di ASP.

Nell'esempio seguente vengono usati i metodi Save e Open per rendere persistente un Recordset e riaprirlo in un secondo momento:

'BeginPersist  
   conn.ConnectionString = _  
   "Provider=SQLOLEDB;Data Source=MySQLServer;" _  
      & "Integrated Security=SSPI;Initial Catalog=pubs"  
   conn.Open  
  
   conn.Execute "create table testtable (dbkey int " & _  
      "primary key, field1 char(10))"  
   conn.Execute "insert into testtable values (1, 'string1')"  
  
   Set rst.ActiveConnection = conn  
   rst.CursorLocation = adUseClient  
  
   rst.Open "select * from testtable", conn, adOpenStatic, _  
      adLockBatchOptimistic  
  
   'Change the row on the client  
   rst!field1 = "NewValue"  
  
   'Save to a file--the .dat extension is an example; choose  
   'your own extension. The changes will be saved in the file  
   'as well as the original data.  
   MyFile = Dir("c:\temp\temptbl.dat")  
   If MyFile <> "" Then  
       Kill "c:\temp\temptbl.dat"  
   End If  
  
   rst.Save "c:\temp\temptbl.dat", adPersistADTG  
   Set rst = Nothing  
  
   'Now reload the data from the file  
   Set rst = New ADODB.Recordset  
   rst.Open "c:\temp\temptbl.dat", , adOpenStatic, _  
      adLockBatchOptimistic, adCmdFile  
  
   Debug.Print "After Loading the file from disk"  
   Debug.Print "   Current Edited Value: " & rst!field1.Value  
   Debug.Print "   Value Before Editing: " & rst!field1.OriginalValue  
  
   'Note that you can reconnect to a connection and  
   'submit the changes to the data source  
   Set rst.ActiveConnection = conn  
   rst.UpdateBatch  
'EndPersist  

Osservazioni:

Questa sezione descrive gli argomenti seguenti: