Condividi tramite


Creazione di un set di righe di parametri con valori di tabella

Sebbene i consumer siano in grado di fornire qualsiasi oggetto set di righe per i parametri con valori di tabella, vengono implementati gli oggetti set di righe tipici rispetto agli archivi dati di back-end, con conseguente limitazione delle prestazioni. Per questo motivo, il provider OLE DB di SQL Server Native Client consente ai consumer di creare un oggetto set di righe specializzato nei dati in memoria. Questo oggetto set di righe speciale in memoria rappresenta un nuovo oggetto COM definito set di righe di parametri con valori di tabella. Tale oggetto fornisce funzionalità simili ai set di parametri.

Gli oggetti set di righe di 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 una sola istanza di un oggetto set di righe di parametri con valori di tabella per parametro con valori di tabella. Il consumer può creare gli oggetti set di righe di parametri con valori di tabella fornendo le informazioni sui metadati già note (scenario statico) o individuandole tramite le interfacce del provider (scenario dinamico). Nelle sezioni seguenti vengono descritti questi due scenari.

Scenario statico

Quando le informazioni sul tipo sono note, il consumer utilizza ITableDefinitionWithConstraints::CreateTableWithConstraints per creare un'istanza dell'oggetto set di righe di parametri con valori di tabella che corrisponde 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 desidera creare un'istanza. Il campo eKind sarà impostato su DBKIND_GUID_NAME. Questo nome è necessario quando si tratta di un'istruzione SQL ad hoc; il nome è facoltativo se è una chiamata di procedura.

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

Le proprietà dell'oggetto set di righe di 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. Tali proprietà consentono di specificare le impostazioni predefinite e calcolate per ogni colonna. Supportano inoltre le proprietà esistenti della colonna, ad esempio nullability e identity.

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

Per recuperare informazioni sullo stato null, univoco, di calcolo e di aggiornamento di ogni colonna, il consumer utilizza 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, analogamente al modo in cui vengono specificate le colonne 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 utilizzare IOpenRowset::OpenRowset per creare un'istanza degli oggetti set di righe di parametri con valori di tabella. L'unica informazione che il consumer deve fornire al provider è il nome del tipo.

In questo scenario, il provider ottiene le informazioni sul tipo relative a 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 (vincoli e informazioni sulla colonna) 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 viene eseguita in modo diverso rispetto allo scenario statico. Lo scenario dinamico funziona solo con le chiamate di procedura con parametri.