次の方法で共有


データ ソースへの接続の確立

SQL Server Native Client OLE DB プロバイダにアクセスするには、コンシューマは、まず CoCreateInstance メソッドを呼び出してデータ ソース オブジェクトのインスタンスを作成する必要があります。一意のクラス ID (CLSID) で、各 OLE DB プロバイダが識別されます。SQL Server Native Client OLE DB プロバイダのクラス ID は、CLSID_SQLNCLI10 です。SQLNCLI_CLSID というシンボルを使用することもできます。このシンボルは、参照先の sqlncli.h で使用されている SQL Server Native Client OLE DB プロバイダに解決されます。

データ ソース オブジェクトは、IDBProperties インターフェイスを公開します。コンシューマは、このインターフェイスを使用して、サーバー名、データベース名、ユーザー ID、パスワードなどの基本的な認証情報を提供します。IDBProperties::SetProperties メソッドが呼び出されて、これらのプロパティが設定されます。

同じコンピュータ上で複数の SQL Server インスタンスが実行されている場合、サーバー名を ServerName\InstanceName のように指定します。

データ ソース オブジェクトは、IDBInitialize インターフェイスも公開します。プロパティを設定した後、IDBInitialize::Initialize メソッドを呼び出して、データ ソースへの接続を確立します。次に例を示します。

CoCreateInstance(CLSID_SQLNCLI10, 
                 NULL, 
                 CLSCTX_INPROC_SERVER,
                 IID_IDBInitialize, 
                 (void **) &pIDBInitialize)

この CoCreateInstance の呼び出しにより、CLSID_SQLNCLI10 に関連付けられているクラスのオブジェクトが 1 つ作成されます。CLSID_SQLNCLI10 は、オブジェクトの作成に使用されるデータとコードに関連付けられている CSLID です。IID_IDBInitialize は、オブジェクトとの通信に使われるインターフェイス (IDBInitialize) の ID への参照です。

次に、データ ソースへの接続を初期化し、確立する関数の例を示します。OLE DB サンプル アプリケーションへのアクセスの詳細については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。

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();
}