Condividi tramite


Oggetti BLOB e OLE

Il provider OLE DB di SQL Server Native Client espone l'interfaccia ISequentialStream per supportare l'accesso del consumer ai tipi SQL Serverntext, text, image, varchar(max), nvarchar(max), varbinary(max) e ai tipi di dati xml come oggetti binari di grandi dimensioni (BLOBs). Il metodo Read in ISequentialStream consente al consumer di recuperare una quantità elevata di dati in blocchi gestibili.

Per un esempio che illustri questa caratteristica, vedere l'esempio OLE BD per l'impostazione di dati di grandi dimensioni disponibile in CodePlex; per ulteriori informazioni, vedere Esempi del Motore di database di SQL Server.

Il provider OLE DB di SQL Server Native Client può utilizzare un'interfaccia IStorage implementata dal consumer quando il consumer fornisce il puntatore di interfaccia in una funzione di accesso associata per la modifica dei dati.

Nel caso di tipi di dati per valori di grandi dimensioni, il provider OLE DB di SQL Server Native Client verifica i presupposti relativi alle dimensioni dei tipi nelle interfacce IRowset e DDL. Le colonne che presentano i tipi di dati varchar, nvarchar e varbinary per i quali la dimensione massima è impostata su un valore illimitato verranno rappresentate come ISLONG mediante le interfacce e i set di righe dello schema che restituiscono tipi di dati di colonna.

Il provider OLE DB di SQL Server Native Client espone i tipi varchar(max), varbinary(max) e nvarchar(max) rispettivamente come DBTYPE_STR, DBTYPE_BYTES e DBTYPE_WSTR.

In un'applicazione è possibile utilizzare questi tipi nei modi seguenti:

  • Eseguire l'associazione come tipo (DBTYPE_STR, DBTYPE_BYTES, DBTYPE_WSTR). Se le dimensioni de buffer non sono sufficienti, si verificherà il troncamento, esattamente come accade per questi tipi nelle release precedenti, anche se ora sono disponibili valori più grandi.

  • Eseguire l'associazione come tipo e specificare DBTYPE_BYREF.

  • Eseguire l'associazione come DBTYPE_IUNKNOWN e utilizzare il flusso.

Se si esegue l'associazione a DBTYPE_IUNKNOWN, viene utilizzata la funzionalità di flusso di ISequentialStream. Il provider OLE DB di SQL Server Native Client supporta anche parametri di output di associazione come DBTYPE_IUNKNOWN per i tipi di dati per valori di grandi dimensioni per semplificare gli scenari in cui una stored procedure restituisce questi tipi di dati che verranno esposti come DBTYPE_IUNKNOWN al client.

Limitazioni degli oggetti di archiviazione

  • Il provider OLE DB di SQL Server Native Client può supportare un solo oggetto di archiviazione aperto. Eventuali tentativi di aprire più oggetti di archiviazione (per ottenere un riferimento su più di un puntatore di interfaccia ISequentialStream) restituiscono DBSTATUS_E_CANTCREATE.

  • Nel provider OLE DB di SQL Server Native Client il valore predefinito della proprietà di sola lettura DBPROP_BLOCKINGSTORAGEOBJECTS è VARIANT_TRUE. Tale valore indica che se un oggetto di archiviazione è attivo, alcuni metodi (diversi da quelli degli oggetti di archiviazione) non riusciranno e verrà restituito E_UNEXPECTED.

  • La lunghezza dei dati presentati da un oggetto di archiviazione implementato dal consumer deve essere resa nota al provider OLE DB di SQL Server Native Client quando viene creata la funzione di accesso alle righe che fa riferimento all'oggetto di archiviazione. Il consumer deve associare un indicatore di lunghezza nella struttura DBBINDING utilizzata per la creazione della funzione di accesso.

  • Se una riga contiene più di un valore di dati di grandi dimensioni e DBPROP_ACCESSORDER non è DBPROPVAL_AO_RANDOM, il consumer deve utilizzare un set di righe supportato dal cursore del provider OLE DB di SQL Server Native Client per recuperare i dati di riga o elaborare tutti i valori di dati di grandi dimensioni prima di recuperare altri valori di riga. Se DBPROP_ACCESSORDER è DBPROPVAL_AO_RANDOM, il provider OLE DB di SQL Server Native Client memorizza nella cache tutti i tipi di dati xml come oggetti binari di grandi dimensioni (BLOB) in modo da consentirne l'accesso in qualsiasi ordine.