Condividi tramite


Persistenza dei dati

Il portable computing (ad esempio, l'uso di portatili) ha generato la necessità di applicazioni che possono essere eseguite in uno stato connesso e disconnesso. ADO ha aggiunto il supporto per questo, offrendo allo sviluppatore la possibilità di salvare un cursore client Recordset 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 utilizza l'applicazione in viaggio, è fondamentale fornire la possibilità di apportare modifiche e aggiungere nuovi record, che possono quindi essere riconnessi al database in un secondo momento per poi confermare le modifiche.

  • Tabelle di riferimento aggiornate raramente: Spesso in un'applicazione, le tabelle vengono utilizzate come riferimenti, ad esempio le tabelle fiscali statali. Vengono aggiornati raramente e sono di sola lettura. Anziché rileggere questi dati dal server ogni volta che viene avviata l'applicazione, l'applicazione può semplicemente caricare i dati da un oggetto recordset persistente in locale.

In ADO, per salvare e caricare Recordset , utilizzare i metodi Recordset.Save e Recordset.Open(,,,,adCmdFile) sull'oggetto ADO Recordset .

È possibile usare il metodo save recordset per rendere persistente l'recordset ad ADO in un file su un disco. È anche possibile salvare un Recordset in un oggetto Stream ADO. Gli oggetti Stream vengono descritti più avanti nella guida. Successivamente, è possibile usare il metodo Open per riaprire il recordset quando si è pronti per usarlo. Per impostazione predefinita, ADO salva il recordset nel formato AdTG (Microsoft Advanced Data TableGram) proprietario. Questo formato binario viene specificato usando il valore adPersistADTG PersistFormatEnum. In alternativa, puoi scegliere di salvare il recordset come XML usando adPersistXML. Per altre informazioni sul salvataggio di recordset come XML, vedere Rendere persistenti i 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 la destinazione . Se si omette Destinazione, verrà creato un nuovo file con un nome impostato sul valore della proprietà sorgente dell'oggetto Recordset.

Omettere di destinazione quando successivamente si chiama Salva dopo il primo salvataggio o si verificherà un errore di runtime. Se successivamente si chiama Salva con una nuova Destinazione, il Recordset viene salvato nella nuova destinazione. Tuttavia, la nuova destinazione e la destinazione originale saranno entrambe aperte.

Salva non chiude né il recordset né la destinazione, quindi è possibile continuare a lavorare con il recordset e salvare le modifiche più recenti. La destinazione rimane aperta fino alla chiusura del recordset, mentre 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 da Microsoft Internet Explorer.

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

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

Per ottenere risultati ottimali, impostare la proprietà CursorLocation su adUseClient con Salva. Se il provider non supporta tutte le funzionalità necessarie per salvare oggetti Recordset, il servizio cursore fornirà tale funzionalità.

Quando un Recordset viene salvato in modo permanente con la proprietà CursorLocation impostata su adUseServer, la capacità di aggiornamento per il Recordset è limitata. In genere, sono consentiti solo gli aggiornamenti a tabella singola, gli inserimenti e le eliminazioni (a seconda della funzionalità del provider). Anche il metodo Resync non è disponibile in questa configurazione.

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

Nell'esempio seguente, i metodi Save e Open vengono usati per salvare in modo permanente un recordset e riaprirlo in seguito:

'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 contiene gli argomenti seguenti.