Condividi tramite


Sezione di dati

La sezione di dati definisce i dati del set di righe insieme a eventuali aggiornamenti, inserimenti o eliminazioni in sospeso. La sezione di dati può contenere zero o più righe. Può contenere solo i dati di un set di righe in cui la riga è definita dallo schema. Inoltre, come indicato in precedenza, le colonne senza dati possono essere omesse. Se nella sezione di dati viene usato un attributo o un sottoelemento e tale costrutto non è stato definito nella sezione dello schema, viene ignorato automaticamente.

String

I caratteri XML riservati nei dati di testo devono essere sostituiti con entità carattere appropriate. Ad esempio, nel nome della società "Joe's Garage", la virgoletta singola deve essere sostituita da un'entità. La riga effettiva sarà simile alla seguente:

<z:row CompanyName="Joe's Garage"/>  

I caratteri seguenti sono riservati in XML e devono essere sostituiti da entità carattere: {',",&,<,>}.

Binario

I dati binari sono codificati in bin.hex, ovvero viene eseguito il mapping di un byte a due caratteri, un carattere per ogni nibble.

Data/Ora

Il formato variant VT_DATE non è supportato direttamente dai tipi di dati XML-Data. Il formato corretto per le date con un componente di data e ora è aaaa-mm-ggThh:mm:ss.

Per altre informazioni sui formati di data specificati da XML, vedere la specifica W3C XML-Data.

Quando la specifica XML-Data definisce due tipi di dati equivalenti (ad esempio, i4 == int), ADO scriverà il nome descrittivo ma leggerà entrambi.

Gestione delle modifiche in sospeso

Un oggetto Recordset può essere aperto in modalità di aggiornamento immediato o batch. Quando viene aperto in modalità di aggiornamento batch con cursori sul lato client, tutte le modifiche apportate all'oggetto Recordset sono in sospeso finché non viene chiamato il metodo UpdateBatch. Le modifiche in sospeso vengono rese persistenti anche quando viene salvato l'oggetto Recordset. In XML, sono rappresentate dall'uso degli elementi "update" definiti in urn:schemas-microsoft-com:rowset. Inoltre, se è possibile aggiornare un set di righe, la proprietà aggiornabile deve essere impostata su true nella definizione della riga. Ad esempio, per definire che la tabella Shippers contiene modifiche in sospeso, la definizione della riga sarà simile alla seguente.

<s:ElementType name="row" content="eltOnly" updatable="true">  
  <s:attribute type="ShipperID"/>  
  <s:attribute type="CompanyName"/>  
  <s:attribute type="Phone"/>  
  <s:extends type="rs:rowbase"/>  
</s:ElementType>  

Ciò indica al provider di persistenza di visualizzare i dati in modo che ADO possa costruire un oggetto Recordset aggiornabile.

I dati di esempio seguenti illustrano l'aspetto degli inserimenti, delle modifiche e delle eliminazioni nel file persistente.

<rs:data>  
  <z:row ShipperID="2" CompanyName="United Package"   
    Phone="(503) 555-3199"/>  
<rs:update>  
  <rs:original>  
    <z:row ShipperID="3" CompanyName="Federal Shipping"   
      Phone="(503) 555-9931"/>  
  </rs:original>  
  <z:row Phone="(503) 552-7134"/>  
</rs:update>  
<rs:insert>  
  <z:row ShipperID="12" CompanyName="Lightning Shipping"   
    Phone="(505) 111-2222"/>  
  <z:row ShipperID="13" CompanyName="Thunder Overnight"   
    Phone="(505) 111-2222"/>  
  <z:row ShipperID="14" CompanyName="Blue Angel Air Delivery"   
    Phone="(505) 111-2222"/>  
</rs:insert>  
<rs:delete>  
  <z:row ShipperID="1" CompanyName="Speedy Express" Phone="(503) 555-9831"/>  
</rs:delete>  
</rs:data>  

Un aggiornamento contiene sempre tutti i dati di riga originali seguiti dai dati di riga modificati. La riga modificata può contenere tutte le colonne o solo le colonne effettivamente modificate. Nell'esempio precedente la riga per Shipper 2 non è stata modificata e solo la colonna Phone ha modificato i valori per Shipper 3 ed è quindi l'unica colonna inclusa nella riga modificata. Le righe inserite per Shippers 12, 13 e 14 vengono raggruppate in un unico tag rs:insert. Si noti che anche le righe eliminate possono essere raggruppate, sebbene questa operazione non sia illustrata nell'esempio precedente.

Vedi anche

Persistenza di record in formato XML