Compartilhar via


Estabelecendo uma conexão com uma fonte de dados

Para acessar o provedor OLE DB do SQL Server, primeiro o consumidor deve criar uma instância de um objeto de fonte de dados chamando o método CoCreateInstance. Um CLSID (identificador de classe) exclusivo identifica cada provedor OLE DB. O identificador de classe do provedor OLE DB do SQL Server Native Client é CLSID_SQLNCLI10. Você também pode usar o símbolo SQLNCLI_CLSID, que será resolvido para o provedor OLE DB do SQL Server Native Client usado no sqlncli.h que você referencia.

O objeto da fonte de dados expõe a interface IDBProperties, que é usada pelo consumidor para fornecer informações básicas de autenticação, como o nome do servidor, o nome do banco de dados, a ID do usuário e a senha. O método IDBProperties::SetProperties é chamado para definir essas propriedades.

Se houver várias instâncias do SQL Server em execução no computador, o nome do servidor será especificado como ServerName\InstanceName.

O objeto da fonte de dados também expõe a interface IDBInitialize. Depois que as propriedades são definidas, a conexão com a fonte de dados é estabelecida chamando o método IDBInitialize::Initialize. Por exemplo:

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

Esta chamada de CoCreateInstance cria um único objeto da classe associada com CLSID_SQLNCLI10 (CSLID associado com os dados e o código que serão usados para criar o objeto). IID_IDBInitialize é uma referência ao identificador da interface (IDBInitialize) a ser usada para a comunicação com o objeto.

Segue uma função de exemplo que inicializa e estabelece uma conexão com a fonte de dados. Para obter informações sobre como acessar aplicativos OLE DB de exemplo, consulte Considerações para instalar exemplos e bancos de dados de exemplo do 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();
}