Compartir a través de


Invalidar un descriptor de acceso dinámico

Cuando se usa un descriptor de acceso dinámico como CDynamicAccessor, el método Open del comando crea automáticamente un descriptor de acceso, en función de la información de columna del conjunto de filas abierto. Puede invalidar el descriptor de acceso dinámico para controlar exactamente cómo se enlazan las columnas.

Para invalidar el descriptor de acceso dinámico, pase false como último parámetro al métodoCCommand::Open. Esto impide a Open crear automáticamente un descriptor de acceso. A continuación, puede llamar a GetColumnInfo y llamar a AddBindEntry para cada columna que desee enlazar. El código siguiente muestra cómo hacerlo:

USES_CONVERSION;
double   dblProductID;

CCommand<CDynamicAccessor> product;
// Open the table, passing false to prevent automatic binding
product.Open(session, _T("Select * FROM Products"), NULL, NULL, DBGUID_DEFAULT, false);


ULONG         nColumns;
DBCOLUMNINFO*   pColumnInfo;
// Get the column information from the opened rowset.
product.GetColumnInfo(&nColumns, &pColumnInfo);

// Bind the product ID as a double.
pColumnInfo[0].wType          = DBTYPE_R8;
pColumnInfo[0].ulColumnSize = 8;
product.AddBindEntry(pColumnInfo[0]);

// Bind the product name as it is.
product.AddBindEntry(pColumnInfo[1]);

// Bind the reorder level as a string.
pColumnInfo[8].wType          = DBTYPE_STR;
pColumnInfo[8].ulColumnSize = 10;
product.AddBindEntry(pColumnInfo[8]);

// You have finished specifying the bindings. Go ahead and bind.
product.Bind();
// Free the memory for the column information that was retrieved in
// previous call to GetColumnInfo.
CoTaskMemFree(pColumnInfo);


char*   pszProductName;
char*   pszReorderLevel;
bool   bRC;

// Loop through the records tracing out the information.
while (product.MoveNext() == S_OK)
{
   bRC = product.GetValue(1, &dblProductID);
   pszProductName   = (char*)product.GetValue(2);
   pszReorderLevel  = (char*)product.GetValue(9);

   ATLTRACE(_T("Override = %lf \"%s\" \"%s\"\n"), dblProductID,
      A2T(pszProductName), A2T(pszReorderLevel));
}

Consulte también

Usar descriptores de acceso