데이터 원본에 대한 연결 설정
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)
OLE DB Driver for SQL Server에 액세스하려면 소비자는 먼저 메서드를 호출하여 데이터 원본 개체의 인스턴스를 CoCreateInstance
만들어야 합니다. 각 OLE DB 공급자는 고유한 CLSID(클래스 ID)를 사용하여 식별합니다. OLE DB Driver for SQL Server의 경우 파일에 정의된 MSOLEDBSQL_CLSID 기호를 msoledbsql.h
사용할 수 있습니다.
데이터 원본 개체는 소비자가 서버 이름, 데이터베이스 이름, 사용자 ID 및 암호와 같은 기본 인증 정보를 제공하는 데 사용하는 인터페이스를 노출 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;
}
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기