Устанавливает соединение с источником данных
Чтобы получить доступ к поставщику SQL Server Native Client OLE DB, потребитель должен сначала создать экземпляр объекта источника данных, вызвав метод CoCreateInstance. Каждый поставщик OLE DB определяется уникальным идентификатором класса (CLSID). Для поставщика SQL SERVER NATIVE CLIENT OLE DB идентификатор класса CLSID_SQLNCLI10. Вы также можете использовать SQLNCLI_CLSID символов, которые будут разрешаться в поставщик OLE DB SQL Server Native Client, используемый в файле sqlncli.h, на который вы ссылаетесь.
Объект источника данных предоставляет интерфейс IDBProperties, который потребитель использует с целью передачи сведений для обычной проверки подлинности — имени сервера, имени базы данных, идентификатора пользователя и пароля. Для задания значений этих свойств используется метод IDBProperties::SetProperties.
Если на компьютере выполняется несколько экземпляров SQL Server, имя сервера указывается как «Имя_Сервера\Имя_Экземпляра».
Объект источника данных также предоставляет интерфейс IDBInitialize. После присвоения значений свойствам устанавливается соединение с источником данных с помощью вызова метода IDBInitialize::Initialize. Пример:
CoCreateInstance(CLSID_SQLNCLI10,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void **) &pIDBInitialize)
Этот вызов CoCreateInstance создает один объект класса, связанного с CLSID_SQLNCLI10 (CSLID, связанный с данными и кодом, которые будут использоваться для создания объекта). IID_IDBInitialize представляет собой ссылку на идентификатор интерфейса (IDBInitialize), который будет использоваться для взаимодействия с объектом.
Далее приведен образец функции, которая проводит инициализацию и устанавливает соединение с источником данных.
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();
}
См. также:
Создание приложения поставщика OLE DB для собственного клиента SQL Server