Compartir a través de


Establecer una conexión con un origen de datos

Para tener acceso al proveedor OLE DB de SQL Server Native Client, el consumidor debe crear primero una instancia de un objeto de origen de datos llamando al método CoCreateInstance. Un identificador de clase único (CLSID) identifica cada proveedor OLE DB. El identificador de clase del proveedor OLE DB de SQL Server Native Client es CLSID_SQLNCLI10. También puede utilizar el símbolo SQLNCLI_CLSID que se resolverá como el proveedor OLE DB de SQL Server Native Client utilizado en el sqlncli.h al que hace referencia.

El objeto de origen de datos expone la interfaz IDBProperties, que el consumidor utiliza para proporcionar información de autenticación básica como nombre de servidor, nombre de base de datos, identificador de usuario y contraseña. Se llama al método IDBProperties::SetProperties para establecer estas propiedades.

Si hay varias instancias de SQL Server ejecutándose en el equipo, el nombre de servidor se especifica como ServerName\InstanceName.

El objeto de origen de datos también expone la interfaz IDBInitialize. Una vez establecidas las propiedades, se establece la conexión al origen de datos llamando al método IDBInitialize::Initialize. Por ejemplo:

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

Esta llamada a CoCreateInstance crea un objeto único de la clase asociado a CLSID_SQLNCLI10 (CSLID asociado con los datos y el código que se utilizará para crear el objeto). IID_IDBInitialize es una referencia al identificador de la interfaz (IDBInitialize) que se va a utilizar para comunicar con el objeto.

La siguiente es una función de ejemplo que inicializa y establece una conexión al origen de datos.

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

Vea también

Conceptos

Crear una aplicación de proveedor OLE DB de SQL Server Native Client