Etablering av anslutning till en SQL Server-baserad klientdatakälla

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

För att få tillgång till SQL Server Native Client OLE DB-leverantören måste konsumenten först skapa en instans av ett datakällobjekt genom att anropa CoCreateInstance-metoden. En unik klassidentifierare (CLSID) identifierar varje OLE DB-leverantör. För den SQL Server ursprungliga Native Client OLE DB-leverantören är klassidentifieraren CLSID_SQLNCLI10. Du kan också använda symbolen SQLNCLI_CLSID som kommer att lösas till den SQL Server Native Client OLE DB-leverantören som används i sqlncli.h som du refererar till.

Datakällobjektet exponerar IDBProperties-gränssnittet , som konsumenten använder för att tillhandahålla grundläggande autentiseringsinformation såsom servernamn, databasnamn, användar-ID och lösenord. Metoden IDBProperties::SetProperties anropas för att sätta dessa egenskaper.

Om det finns flera instanser av SQL Server som körs på datorn anges servernamnet som ServerName\InstanceName.

Datakällobjektet exponerar också IDBInitialize-gränssnittet . Efter att egenskaperna har satts etableras anslutningen till datakällan genom att anropa metoden IDBInitialize::Initialize . Ett exempel:

CoCreateInstance(CLSID_SQLNCLI10,   
                 NULL,   
                 CLSCTX_INPROC_SERVER,  
                 IID_IDBInitialize,   
                 (void **) &pIDBInitialize)  

Detta anrop till CoCreateInstance skapar ett enda objekt av klassen associerad med CLSID_SQLNCLI10 (CSLID kopplat till data och kod som ska användas för att skapa objektet). IID_IDBInitialize är en referens till identifieraren för gränssnittet (IDBInitialize) som ska användas för att kommunicera med objektet.

Följande är en exempelfunktion som initierar och etablerar en anslutning till datakällan.

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();  
}