SQLGetDescField
SQL Server Sterownik ODBC macierzysty klient udostępnia pola deskryptora specyficzne dla sterownika dla realizacji wiersza deskryptora (IRD) tylko.W ramach IRD SQL Server pola deskryptora są wywoływane za pomocą atrybutów specyficznych dla sterownika kolumna.Informacje pełną listę pól dostępnych deskryptora specyficzne dla sterownika, zobacz SQLColAttribute.
Deskryptor pól, które zawierają kolumna Identyfikator ciągi są często ciągi znaków o zerowej długości.Wszystkie SQL Server-deskryptora określonej wartości pole tylko do odczytu.
Jak pobrać atrybutów z SQLColAttribute, pola deskryptora sprawozdanie, które atrybuty poziom wierszy (na przykład SQL_CA_SS_COMPUTE_ID) są raportowane dla wszystkich kolumn zestaw wyników.
Parametry oródwierszową i SQLGetDescField
SQLGetDescField można uzyskać wartości dla rozszerzonych atrybutów tabela-wycenione parametrów i tabela-wycenione parametr kolumny.Więcej informacji o tabela-wyceniane parametrów, zobacz Parametry oródwierszową (ODBC).
Obsługa SQLGetDescField Enhanced Data i czas funkcje
Aby uzyskać informacje o dostępnych z nową datą pól deskryptora /czas typów, zobacz Parametr i wynik metadanych.
Aby uzyskać więcej informacji, zobacz Data/Godzina ulepszenia (ODBC).
Obsługa dużych CLR UDTs SQLGetDescField
SQLGetDescField obsługuje duże CLR zdefiniowane przez użytkownika typów (UDTs).Aby uzyskać więcej informacji, zobacz Duże CLR typów zdefiniowanych przez użytkownika (ODBC).
SQLGetDescField obsługa rozrzedzania kolumn
SQLGetDescFieldmożna zbadać nowe pole IRD SQL_CA_SS_IS_COLUMN_SET, aby określić, czy kolumna jest column_set kolumny.
Aby uzyskać więcej informacji, zobacz Obsługa rozrzedzenia kolumn (ODBC).
Przykład
typedef struct tagCOMPUTEBYLIST
{
SQLSMALLINT nBys;
SQLSMALLINT aByList[1];
} COMPUTEBYLIST;
typedef COMPUTEBYLIST* PCOMPUTEBYLIST;
SQLHDESC hIRD;
SQLINTEGER cbIRD;
SQLINTEGER nSet = 0;
// . . .
// Execute a statement that contains a COMPUTE clause,
// then get the descriptor handle of the IRD and
// get some IRD values.
SQLGetStmtAttr(g_hStmt, SQL_ATTR_IMP_ROW_DESC,
(SQLPOINTER) &hIRD, sizeof(SQLHDESC), &cbIRD);
// For statement-wide column attributes, any
// descriptor record will do. You know that 1 exists,
// so use it.
SQLGetDescField(hIRD, 1, SQL_CA_SS_NUM_COMPUTES,
(SQLPOINTER) &nComputes, SQL_IS_INTEGER, &cbIRD);
if (nSet == 0)
{
SQLINTEGER nOrderID;
printf_s("Normal result set.\n");
for (nCol = 0; nCol < nCols; nCol++)
{
SQLGetDescField(hIRD, nCol+1,
SQL_CA_SS_COLUMN_ORDER,
(SQLPOINTER) &nOrderID, SQL_IS_INTEGER,
&cbIRD);
if (nOrderID != 0)
{
printf_s("Col in ORDER BY, pos: %ld",
nOrderID);
}
printf_s("\n");
}
printf_s("\n");
}
else
{
PCOMPUTEBYLIST pByList;
SQLSMALLINT nBy;
SQLINTEGER nColID;
printf_s("Computed result set number: %lu\n",
nSet);
SQLGetDescField(hIRD, 1, SQL_CA_SS_COMPUTE_BYLIST,
(SQLPOINTER) &pByList, SQL_IS_INTEGER,
&cbIRD);
if (pByList != NULL)
{
printf_s("Clause ordered by columns: ");
for (nBy = 0; nBy < pByList->nBys; )
{
printf_s("%u", pByList->aByList[nBy]);
nBy++;
if (nBy == pByList->nBys)
{
printf_s("\n");
}
else
{
printf_s(", ");
}
}
}
else
{
printf_s("Compute clause set not ordered.\n");
}
for (nCol = 0; nCol < nCols; nCol++)
{
SQLGetDescField(hIRD, nCol+1,
SQL_CA_SS_COLUMN_ID, (SQLPOINTER) &nColID,
SQL_IS_INTEGER, &cbIRD);
printf_s("ColumnID: %lu, nColID);
}
printf_s("\n");
}
if (SQLMoreResults(g_hStmt) == SQL_SUCCESS)
{
// Determine the result set indicator.
SQLGetDescField(hIRD, 1, SQL_CA_SS_COMPUTE_ID,
(SQLPOINTER) &nSet, SQL_IS_INTEGER, &cbIRD);
}
Zobacz także