Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Система аналитической платформы (PDW)
SQL база данных в Microsoft Fabric
Чтобы получить доступ к OLE DB Driver for SQL Server, потребитель должен сначала создать экземпляр объекта источника данных, вызвав CoCreateInstance метод. Каждый поставщик OLE DB определяется уникальным идентификатором класса (CLSID). Для драйвера OLE DB для SQL Server можно использовать символ MSOLEDBSQL_CLSID, определенный msoledbsql.h в файле.
Объект источника данных предоставляет IDBProperties интерфейс, который потребитель использует для предоставления основных сведений проверки подлинности, таких как имя сервера, имя базы данных, идентификатор пользователя и пароль. Метод IDBProperties::SetProperties вызывается для задания этих свойств.
Если на компьютере запущено несколько экземпляров SQL Server, имя сервера указывается в качестве имени сервера ServerName\InstanceName.
Объект источника данных также предоставляет IDBInitialize интерфейс. После установки свойств подключение к источнику IDBInitialize::Initialize данных устанавливается путем вызова метода. Например:
CoCreateInstance(MSOLEDBSQL_CLSID,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void **) &pIDBInitialize)
Этот вызов для CoCreateInstance создания одного объекта класса, связанного с MSOLEDBSQL_CLSID (CSLID, связанного с данными и кодом, которые будут использоваться для создания объекта). IID_IDBInitialize — это ссылка на идентификатор интерфейса (IDBInitialize), который будет использоваться для взаимодействия с объектом.
Следующий пример функции демонстрирует, как выполнять инициализацию и устанавливать подключение к источнику данных.
#include "msoledbsql.h"
#include <stdio.h>
HRESULT InitializeAndEstablishConnection(IDBInitialize *&pIDBInitialize);
void main() {
IDBInitialize *pIDBInitialize = nullptr;
HRESULT hr = S_OK;
// Initialize The Component Object Module Library
CoInitialize(nullptr);
hr = InitializeAndEstablishConnection(pIDBInitialize);
if (FAILED(hr)) {
printf("Failed to establish connection.\r\n");
goto _ExitMain;
}
// Insert code that uses the established connection
_ExitMain:
// Free Up All Allocated Memory
if (pIDBInitialize)
{
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
pIDBInitialize = nullptr;
}
// Release The Component Object Module Library
CoUninitialize();
}
HRESULT InitializeAndEstablishConnection(IDBInitialize *&pIDBInitialize) {
IDBProperties *pIDBProperties = nullptr;
DBPROP InitProperties[3] = { 0 };
DBPROPSET rgInitPropSet[1] = { 0 };
HRESULT hr = S_OK;
// Obtain access to the OLE DB Driver for SQL Server.
hr = CoCreateInstance(MSOLEDBSQL_CLSID,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDBInitialize,
(void **)&pIDBInitialize);
if (FAILED(hr)) {
printf("Failed to obtain access to the OLE DB Driver.\r\n");
goto _ExitInitialize;
}
// Initialize property values needed to establish connection.
for (int i = 0; i < 3; 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;
// 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 = 3;
rgInitPropSet[0].rgProperties = InitProperties;
// Set initialization properties.
hr = pIDBInitialize->QueryInterface(IID_IDBProperties,
(void **)&pIDBProperties);
if (FAILED(hr)) {
printf("Failed to obtain an IDBProperties interface.\r\n");
goto _ExitInitialize;
}
hr = pIDBProperties->SetProperties(1, rgInitPropSet);
if (FAILED(hr)) {
printf("Failed to set initialization properties.\r\n");
goto _ExitInitialize;
}
// Now establish the connection to the data source.
hr = pIDBInitialize->Initialize();
if (FAILED(hr)) {
printf("Failed to establish connection with the server.\r\n");
goto _ExitInitialize;
}
_ExitInitialize:
if (pIDBProperties)
{
pIDBProperties->Release();
pIDBProperties = nullptr;
}
if (FAILED(hr))
{
if (pIDBInitialize)
{
pIDBInitialize->Release();
pIDBInitialize = nullptr;
}
}
return hr;
}