建立 SQL Server Native Client 數據源的連線
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
若要存取 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();
}