Compartilhar via


Campo status dados Members in acessadores gerado pelo Assistente

Quando você usa o ATL OLE DB consumidor Wizard para criar um consumidor, o assistente gera um membro de dados na classe de registro de usuário de cada campo que você especificar no MAP de coluna.Cada membro de dados é do tipo DWORD e contém um valor de status correspondente ao seu respectivo campo.

Por exemplo, para um membro de dados m_OwnerID, o assistente gera um membro de dados adicionais para o campo status (dwOwnerIDStatus) e um outro para o tamanho do campo (dwOwnerIDLength).Ele também gera um MAP de coluna com COLUMN_ENTRY_LENGTH_STATUS entradas.

Isso é mostrado no código a seguir:

[db_source("insert connection string")]
[db_command(" \
   SELECT \
      Au_ID, \
      Author, \
      `Year Born`, \
      FROM Authors")]

class CAuthors
{
public:

   // The following wizard-generated data members contain status 
   // values for the corresponding fields in the column map. You 
   // can use these values to hold NULL values that the database 
   // returns or to hold error information when the compiler returns 
   // errors. See "Field Status Data Members in Wizard-Generated 
   // Accessors" in the Visual C++ documentation for more information 
   // on using these fields.
   DWORD m_dwAuIDStatus;
   DWORD m_dwAuthorStatus;
   DWORD m_dwYearBornStatus;

   // The following wizard-generated data members contain length
   // values for the corresponding fields in the column map.
   DWORD m_dwAuIDLength;
   DWORD m_dwAuthorLength;
   DWORD m_dwYearBornLength;

BEGIN_COLUMN_MAP(CAuthorsAccessor)
   COLUMN_ENTRY_LENGTH_STATUS(1, m_AuID, dwAuIDLength, dwAuIDStatus)
   COLUMN_ENTRY_LENGTH_STATUS(2, m_Author, dwAuthorLength, dwAuthorStatus)
   COLUMN_ENTRY_LENGTH_STATUS(3, m_YearBorn, dwYearBornLength, dwYearBornStatus)
END_COLUMN_MAP()

   [ db_column(1, status=m_dwAuIDStatus, length=m_dwAuIDLength) ] LONG m_AuID;
   [ db_column(2, status=m_dwAuthorStatus, length=m_dwAuthorLength) ] TCHAR m_Author[51];
   [ db_column(3, status=m_dwYearBornStatus, length=m_dwYearBornLength) ] SHORT m_YearBorn;

   void GetRowsetProperties(CDBPropSet* pPropSet)
   {
      pPropSet->AddProperty(DBPROP_IRowsetChange, true);
      pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
   }
};
Observação:

Se você modificar a classe de registro de usuário ou escreve sua próprias consumidor, as variáveis de dados devem vir antes das variáveis de status e comprimento.

Você pode usar os valores de status para fins de depuração.Se o código gerado pelo assistente ATL OLE DB consumidor para gerar erros de compilação, sistema autônomo DB_S_ERRORSOCCURRED or DB_E_ERRORSOCCURRED, você deve primeiro examinar sistema autônomo valores corrente dos membros de dados do campo status.Aqueles que têm valores diferentes de zero correspondem às colunas ofensivos.

Você também pode usar os valores de status para conjunto um valor nulo para um campo específico.Isso ajuda você em casos em que você deseja diferenciar um valor do campo sistema autônomo nulo em vez de zero.Ele é você decidir se nulo é um valor válido ou um valor especial e decida como seu aplicativo deve lidar com ele.OLE DB define DBSTATUS_S_ISNULL sistema autônomo o meio correto de especificar um valor nulo genérico.Se o consumidor lê os dados e o valor for nulo, o campo status for definido como DBSTATUS_S_ISNULL.Se o consumidor quiser conjunto um valor nulo, o consumidor define o valor de status para DBSTATUS_S_ISNULL antes de chamar o provedor.

Em seguida, abra OLEDB.h e procure por DBSTATUSENUM.Você pode, em seguida, corresponde ao valor numérico do status diferente de zero em relação a DBSTATUSENUM valores de enumeração.Se o nome da enumeração não for suficiente para lhe informar o que há de errado, consulte Status na referência do OLE DB do programador 2.0; Este tópico contém tabelas de status valores usada ao obter ou definir dados.Para obter informações sobre valores de comprimento, consulte Comprimento.

Recuperando o status de uma coluna ou comprimento

Você pode recuperar o status de uma coluna (para verificar se há ou o comprimento de uma coluna de tamanho variávelDBSTATUS_S_ISNULL, por exemplo):

  • Para obter o comprimento, use o COLUMN_ENTRY_LENGTH macro.

  • Para obter o status, use o COLUMN_ENTRY_STATUS macro.

  • Para obter ambos, use COLUMN_ENTRY_LENGTH_STATUS, sistema autônomo mostrado abaixo.

class CProducts
{
public:
   char      szName[40];
   long      nNameLength;
   DBSTATUS   nNameStatus;

BEGIN_COLUMN_MAP(CProducts)
// Bind the column to CProducts.m_ProductName.
// nOrdinal is zero-based, so the column number of m_ProductName is 1.
   COLUMN_ENTRY_LENGTH_STATUS(1, szName, nNameLength, nNameStatus)
END_COLUMN_MAP()
};

CTable<CAccessor<CProducts > > product;

product.Open(session, "Product");
while (product.MoveNext() == S_OK)
{
   // Check the product name isn't NULL before tracing it
   if (product.nNameStatus == DBSTATUS_S_OK)
      ATLTRACE("%s is %d characters\n", szName, nNameLength);
}

Quando você usa CDynamicAccessor, a duração e status são vinculados para você automaticamente. Para recuperar os valores de duração e status, use o GetLength e GetStatus funções de membro.

Consulte também

Referência

Trabalhando com modelos OLE DB consumidor