建立資料來源的連接
若要存取 SQL Server Native Client OLE DB 提供者,取用者必須先呼叫 CoCreateInstance 方法來建立資料來源物件的執行個體。 唯一類別識別項 (CLSID) 會識別每個 OLE DB 提供者。 若是 SQL Server Native Client OLE DB 提供者,類別識別項為 CLSID_SQLNCLI10。 您也可以使用符號 SQLNCLI_CLSID,該符號會解析您參考之 sqlncli.h 中所使用的 SQL Server Native Client OLE DB 提供者。
資料來源物件會公開 IDBProperties 介面,取用者可以使用這個介面來提供基本驗證資訊,例如,伺服器名稱、資料庫名稱、使用者識別碼和密碼。 呼叫 IDBProperties::SetProperties 方法可設定這些屬性。
如果有多個 SQL Server 執行個體在電腦上執行,伺服器名稱會指定為 ServerName\InstanceName。
資料來源物件也會公開 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();
}