Avvio di una connessione a un'origine dati
Per accedere al provider OLE DB di SQL Server Native Client, il consumer deve prima creare un'istanza di un oggetto origine dati chiamando il metodo CoCreateInstance . Un identificatore univoco di classe (CLSID) identifica ogni provider OLE DB. Per il provider OLE DB di SQL Server Native Client, l'identificatore di classe è CLSID_SQLNCLI10. È possibile utilizzare anche il simbolo SQLNCLI_CLSID che verrà risolto nel provider OLE DB di SQL Server Native Client utilizzato nel sqlncli.h di riferimento.
L'oggetto origine dati espone l'interfaccia IDBProperties, utilizzata dal consumer per fornire informazioni di base sull'autenticazione, come il nome del server, il nome del database, l'ID utente e la password. Per impostare queste proprietà, viene chiamato il metodo IDBProperties::SetProperties.
Se nel computer sono in esecuzione più istanze di SQL Server, il nome del server viene specificato come NomeServer\NomeIstanza.
L'oggetto origine dati espone anche l'interfaccia IDBInitialize. Dopo aver impostato le proprietà, la connessione all'origine dati viene stabilita chiamando il metodo IDBInitialize::Initialize. Esempi:
CoCreateInstance(CLSID_SQLNCLI10,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void **) &pIDBInitialize)
Questa chiamata a CoCreateInstance crea un solo oggetto della classe associato a CLSID_SQLNCLI10 (CSLID associato ai dati e al codice utilizzati per creare l'oggetto). IID_IDBInitialize è un riferimento all'identificatore dell'interfaccia (IDBInitialize) da utilizzare per comunicare con l'oggetto.
Di seguito è riportata una funzione di esempio che inizializza e stabilisce una connessione all'origine dati. Per informazioni sull'accesso ad applicazioni OLE DB di esempio, vedere Considerazioni per l'installazione di esempi e di database di esempio di SQL Server.
void InitializeAndEstablishConnection() {
// Initialize the COM library.
CoInitialize(NULL);
// Obtain access to the SQL Server Native Client OLE DB provider.
hr = CoCreateInstance(CLSID_SQLNCLI10,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void **) &pIDBInitialize);
// Initialize property values needed to establish connection.
for (i = 0 ; i < 4 ; i++)
VariantInit(&InitProperties[i].vValue);
// Server name.
// See DBPROP structure for more information on InitProperties
InitProperties[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
InitProperties[0].vValue.vt = VT_BSTR;
InitProperties[0].vValue.bstrVal=
SysAllocString(L"Server");
InitProperties[0].dwOptions = DBPROPOPTIONS_REQUIRED;
InitProperties[0].colid = DB_NULLID;
// Database.
InitProperties[1].dwPropertyID = DBPROP_INIT_CATALOG;
InitProperties[1].vValue.vt = VT_BSTR;
InitProperties[1].vValue.bstrVal= SysAllocString(L"database");
InitProperties[1].dwOptions = DBPROPOPTIONS_REQUIRED;
InitProperties[1].colid = DB_NULLID;
// Username (login).
InitProperties[2].dwPropertyID = DBPROP_AUTH_INTEGRATED;
InitProperties[2].vValue.vt = VT_BSTR;
InitProperties[2].vValue.bstrVal= SysAllocString(L"SSPI");
InitProperties[2].dwOptions = DBPROPOPTIONS_REQUIRED;
InitProperties[2].colid = DB_NULLID;
InitProperties[3].dwOptions = DBPROPOPTIONS_REQUIRED;
InitProperties[3].colid = DB_NULLID;
// Construct the DBPROPSET structure(rgInitPropSet). The
// DBPROPSET structure is used to pass an array of DBPROP
// structures (InitProperties) to the SetProperties method.
rgInitPropSet[0].guidPropertySet = DBPROPSET_DBINIT;
rgInitPropSet[0].cProperties = 4;
rgInitPropSet[0].rgProperties = InitProperties;
// Set initialization properties.
hr = pIDBInitialize->QueryInterface(IID_IDBProperties,
(void **)&pIDBProperties);
hr = pIDBProperties->SetProperties(1, rgInitPropSet);
pIDBProperties->Release();
// Now establish the connection to the data source.
pIDBInitialize->Initialize();
}