Nawiązanie połączenia z natywnym źródłem danych klienta SQL Server

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Aby uzyskać dostęp do dostawcy natywnej klientowej bazy danych SQL Server, konsument musi najpierw utworzyć instancję obiektu źródła danych, wywołując metodę CoCreateInstance. Unikalny identyfikator klasy (CLSID) identyfikuje każdego dostawcę OLE DB. Dla dostawcy SQL Server Native Client OLE DB identyfikator klasy to CLSID_SQLNCLI10. Możesz także użyć SQLNCLI_CLSID symboli, który rozwiąże się do SQL Server natywnego dostawcy OLE DB Native Client, używanego w sqlncli.h, do którego się odwołujesz.

Obiekt źródła danych udostępnia interfejs IDBProperties , którego użytkownik wykorzystuje do podania podstawowych informacji uwierzytelniających, takich jak nazwa serwera, nazwa bazy danych, identyfikator użytkownika i hasło. Metoda IDBProperties::SetProperties jest wywoływana do ustawienia tych właściwości.

Jeśli na komputerze działa wiele instancji SQL Server, nazwa serwera jest określana jako ServerName\InstanceName.

Obiekt źródła danych udostępnia również interfejs IDBInitialize . Po ustawieniu właściwości połączenie ze źródłem danych jest nawiązywane przez wywołanie metody IDBInitialize::Initialize . Przykład:

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

To wywołanie do CoCreateInstance tworzy pojedynczy obiekt klasy powiązanej z CLSID_SQLNCLI10 (CSLID powiązany z danymi i kodem użytym do utworzenia obiektu). IID_IDBInitialize jest odniesieniem do identyfikatora interfejsu (IDBIitialize), który ma być używany do komunikacji z obiektem.

Poniżej znajduje się przykładowa funkcja, która inicjalizuje i nawiązuje połączenie ze źródłem danych.

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