執行 SELECT TOP 1 * FROM TableName 打開一個僅含結構的記錄集,遍歷 Fields 集合即可拿到所有欄位名稱,無需讀取實際數據行,效率極高。
BOOL GetFields(CACCADO &ado) {
CString sql = _T("SELECT TOP 1 * FROM TableName");
ado.OpenRecordset(sql);
ADODB::_RecordsetPtr rs = ado.GetRecordsetPtr();
UINT64 colCount = rs->GetFields()->Count;
for (long i = 0; i < colCount; ++i) {
CString fieldName = (LPCSTR)rs->GetFields()->GetItem(i)->GetName();
// TODO: 將 fieldName 存入容器或直接處理
}
rs->Close();
return TRUE;
}
TOP 1 確保只獲取一行,極小化網絡與 I/O 開銷。Fields 集合索引從 0 開始,Count 給出總欄位數。GetName() 返回 _bstr_t,轉 LPCSTR 再賦值給 CString 即可安全使用。rs->Close() 釋放資源,避免連接泄漏。ADODB::FieldPtr fld = rs->GetFields()->GetItem(i);
long type = fld->Type; // adInteger, adVarWChar 等
long size = fld->DefinedSize; // 定義長度
VARIANT_BOOL nullable = fld->Attributes & adFldIsNullable;