Condividi tramite


creazione di set di righe del parametro Table-Valued

Anche se i consumer possono fornire qualsiasi oggetto set di righe per i parametri con valori di tabella, gli oggetti set di righe tipici vengono implementati in archivi dati back-end e pertanto offrono prestazioni limitate. Per questo motivo, il provider OLE DB di SQL Server Native Client consente ai consumer di creare un oggetto set di righe specializzato sui dati in memoria. Questo oggetto set di righe speciale in memoria è un nuovo oggetto COM denominato set di righe di parametri con valori di tabella . Fornisce funzionalità simili ai set di parametri.

Gli oggetti set di righe dei parametri con valori di tabella vengono creati in modo esplicito dal consumer per i parametri di input tramite più interfacce a livello di sessione. Esiste un'istanza di un oggetto set di righe di parametri con valori di tabella per ogni parametro con valori di tabella. Il consumer può creare gli oggetti set di righe di parametri con valori di tabella fornendo informazioni sui metadati già note (scenario statico) o individuandolo tramite interfacce del provider (scenario dinamico). Le sezioni seguenti descrivono questi due scenari.

Scenario statico

Quando le informazioni sul tipo sono note, il consumer usa ITableDefinitionWithConstraints::CreateTableWithConstraints per creare un'istanza di un oggetto set di righe di parametri con valori di tabella corrispondente a un parametro con valori di tabella.

Il campo guid (parametro pTableID ) contiene il GUID speciale (CLSID_ROWSET_TVP). Il membro pwszName contiene il nome del tipo di parametro con valori di tabella di cui il consumer vuole creare un'istanza. Il campo eKind verrà impostato su DBKIND_GUID_NAME. Questo nome è obbligatorio quando l'istruzione è ad hoc SQL; il nome è facoltativo se si tratta di una chiamata di routine.

Per l'aggregazione, il consumer passa il parametro pUnkOuter con il controllo IUnknown.

Le proprietà dell'oggetto set di righe dei parametri con valori di tabella sono di sola lettura, pertanto il consumer non deve impostare alcuna proprietà in rgPropertySets.

Per il membro rgPropertySets di ogni struttura DBCOLUMNDESC, il consumer può specificare proprietà aggiuntive per ogni colonna. Queste proprietà appartengono al set di proprietà DBPROPSET_SQLSERVERCOLUMN. Consentono di specificare le impostazioni calcolate e predefinite per ogni colonna. Supportano anche proprietà di colonna esistenti, ad esempio valori Null e Identity.

Per recuperare le informazioni corrispondenti da un oggetto set di righe di parametri con valori di tabella, il consumer usa IRowsetInfo::GetProperties.

Per recuperare informazioni sullo stato null, univoco, calcolato e di aggiornamento di ogni colonna, il consumer usa IColumnsRowset::GetColumnsRowset o IColumnsInfo::GetColumnInfo. Questi metodi forniscono informazioni dettagliate su ogni colonna del set di righe di parametri con valori di tabella.

Il consumer specifica il tipo di ogni colonna del parametro con valori di tabella. Questo è simile al modo in cui le colonne vengono specificate quando viene creata una tabella in SQL Server. Il consumer ottiene un oggetto set di righe di parametri con valori di tabella dal provider OLE DB di SQL Server Native Client tramite il parametro di output ppRowset .

Scenario dinamico

Quando il consumer non dispone di informazioni sul tipo, deve usare IOpenRowset::OpenRowset per creare un'istanza di oggetti set di righe di parametri con valori di tabella. Tutto il consumer deve fornire al provider il nome del tipo.

In questo scenario, il provider ottiene informazioni sul tipo su un oggetto set di righe di parametri con valori di tabella dal server per conto del consumer.

I parametri pTableID e pUnkOuter devono essere impostati come nello scenario statico. Il provider OLE DB di SQL Server Native Client ottiene quindi le informazioni sul tipo (informazioni sulla colonna e vincoli) dal server e restituisce un oggetto set di righe di parametri con valori di tabella tramite il parametro ppRowset . Questa operazione richiede la comunicazione con il server e pertanto non esegue lo scenario statico. Lo scenario dinamico funziona solo con chiamate di routine con parametri.

Vedere anche

ParametriTable-Valued (OLE DB)
Usare parametri con valori di tabella (OLE DB)