SQLGetData

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

SQLGetData 可用來擷取結果集資料,而不需要系結資料行值。 您可以在相同的資料行上連續呼叫 SQLGetData ,以從具有 text Ntext image 資料類型的資料行 擷取大量資料。

應用程式不需要系結變數來擷取結果集資料。 您可以使用 SQLGetData ,從 SQL Server Native Client ODBC 驅動程式 擷取任何資料行的資料。

SQL Server Native Client ODBC 驅動程式不支援使用 SQLGetData 以亂數據行順序擷取資料。 所有使用 SQLGetData 處理的未系結資料行都必須具有高於結果集中系結資料行的資料行序數。 應用程式必須處理從最低未系結序數資料行值到最高的資料。 嘗試從較低的序號資料行擷取資料會導致錯誤。 如果應用程式使用伺服器資料指標來報告結果集資料列,應用程式就可以重新參考目前的資料列,然後擷取資料行的值。 如果在預設唯讀的正向資料指標上執行語句,您必須重新執行 語句來備份 SQLGetData

SQL Server Native Client ODBC 驅動程式會正確報告使用 SQLGetData 擷取的 文字 Ntext 影像 資料長度。 應用程式可以使用 StrLen_or_IndPtr 參數傳回,快速擷取長資料。

注意

針對大型實值型別, StrLen_or_IndPtr 會在資料截斷的情況下傳回SQL_NO_TOTAL。

增強日期和時間功能的 SQLGetData 支援

日期/時間類型的結果資料行值會轉換,如從 SQL 轉換成 C 中所述

如需詳細資訊,請參閱 日期和時間改善 (ODBC)

大型 CLR UDT 的 SQLGetData 支援

SQLGetData 支援大型 CLR 使用者定義型別 (UDT)。 如需詳細資訊,請參閱 大型 CLR 使用者定義型別 (ODBC)

範例

SQLHDBC     hDbc = NULL;  
SQLHSTMT    hStmt = NULL;  
long        lEmpID;  
PBYTE       pPicture;  
SQLINTEGER  pIndicators[2];  
  
// Get an environment, connection, and so on.  
...  
  
// Get a statement handle and execute a command.  
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);  
  
if (SQLExecDirect(hStmt,  
    (SQLCHAR*) "SELECT EmployeeID, Photo FROM Employees",  
    SQL_NTS) == SQL_ERROR)  
    {  
    // Handle error and return.  
    }  
  
// Retrieve data from row set.  
SQLBindCol(hStmt, 1, SQL_C_LONG, (SQLPOINTER) &lEmpID, sizeof(long),  
    &pIndicators[0]);  
  
while (SQLFetch(hStmt) == SQL_SUCCESS)  
    {  
    cout << "EmployeeID: " << lEmpID << "\n";  
  
    // Call SQLGetData to determine the amount of data that's waiting.  
    if (SQLGetData(hStmt, 2, SQL_C_BINARY, pPicture, 0, &pIndicators[1])  
        == SQL_SUCCESS_WITH_INFO)  
        {  
        cout << "Photo size: " pIndicators[1] << "\n\n";  
  
        // Get all the data at once.  
        pPicture = new BYTE[pIndicators[1]];  
        if (SQLGetData(hStmt, 2, SQL_C_DEFAULT, pPicture,  
            pIndicators[1], &pIndicators[1]) != SQL_SUCCESS)  
            {  
            // Handle error and continue.  
            }  
  
        delete [] pPicture;  
        }  
    else  
        {  
        // Handle error on attempt to get data length.  
        }  
    }  

另請參閱

SQLGetData 函式
ODBC API 實作詳細資料