Устанавливает соединение с источником данных

Для доступа к поставщику OLE DB собственного клиента SQL Server потребитель должен сначала создать экземпляр объекта источника данных, вызвав метод CoCreateInstance . Каждый поставщик OLE DB определяется уникальным идентификатором класса (CLSID). Идентификатор класса для поставщика OLE DB собственного клиента SQL Server — CLSID_SQLNCLI10. Можно также использовать имя SQLNCLI_CLSID, которое разрешается в имя поставщика OLE DB собственного клиента SQL Server, используемое во включаемом заголовочном файле sqlncli.h.

Объект источника данных предоставляет интерфейс IDBProperties, который потребитель использует для передачи основных данных проверки подлинности — имени сервера, имени базы данных, идентификатора пользователя и пароля. Для задания значений этих свойств используется метод IDBProperties::SetProperties.

Если на компьютере выполняется несколько экземпляров SQL Server, имя сервера указывается как «Имя_Сервера\Имя_Экземпляра».

Объект источника данных также предоставляет интерфейс IDBInitialize. После присвоения значений свойствам устанавливается соединение с источником данных с помощью вызова метода IDBInitialize::Initialize. Например,

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

Этот вызов метода CoCreateInstance создает единственный объект класса, связанного с идентификатором CLSID_SQLNCLI10 (идентификатор CLSID, связанный с кодом и данными, которые будут использоваться для создания объекта). IID_IDBInitialize представляет собой ссылку на идентификатор интерфейса (IDBInitialize), который будет использоваться для взаимодействия с объектом.

Далее приведен пример функции, которая проводит инициализацию и устанавливает соединение с источником данных. Сведения о доступе к примерам использования OLE DB см. в разделе Вопросы установки образцов кода и образцов баз данных 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();
}