首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

.NET 多次查詢結果累積儲存於 DataTable

     編輯:程式設計綜合問答

需求

使用者在文字方塊輸入關鍵字多次查詢,每次查詢結果(整行資料)需累積保存在記憶體中,最後統一處理或顯示。

方案:DataTable 累積

// 表單層級宣告
private DataTable _accumulatedTable = null;

private void btnQuery_Click(object sender, EventArgs e)
{
    string keyword = txtKeyword.Text.Trim();
    if (string.IsNullOrEmpty(keyword)) return;

    // 1. 執行查詢取得 DataTable(假設已有方法)
    DataTable dtResult = QueryDatabase(keyword); // 回傳含欄位結構的 DataTable
    
    if (dtResult == null || dtResult.Rows.Count == 0) 
    {
        MessageBox.Show("查無資料");
        return;
    }

    // 2. 初始化累積表(第一次查詢時複製結構)
    if (_accumulatedTable == null)
    {
        _accumulatedTable = dtResult.Clone(); // 僅複製結構(欄位、型別、約束)
    }

    // 3. 將本次結果逐行匯入累積表
    foreach (DataRow row in dtResult.Rows)
    {
        _accumulatedTable.ImportRow(row); // 複製資料行,保留型別
    }

    // 4. 繫結顯示(可選)
    dataGridView1.DataSource = null;
    dataGridView1.DataSource = _accumulatedTable;
}

// 清除累積
private void btnClear_Click(object sender, EventArgs e)
{
    _accumulatedTable = null;
    dataGridView1.DataSource = null;
}

替代儲存容器比較

容器優點缺點適用場景
DataTable自帶結構、支援繫結、可篩選/排序、可寫 XML/JSON記憶體佔用較大需直接顯示於 Grid、匯出 Excel/XML
List<T> (POCO)型別安全、效能好、序列化快需手動定義類別、Grid 繫結需轉換後續業務邏輯處理、Web API 回傳
DataSet可包含多表、關聯過重多表關聯查詢
Session / 快取跨請求共享Web 專用、需序列化分頁、跨頁面累積

關鍵提醒

  • 使用 `Clone()` 複製結構,`ImportRow()` 複製資料,避免欄位不符錯誤。
  • 大量資料時考慮分頁或虛擬模式,避免 UI 凍結。
  • 若查詢欄位結構可能不同,需動態合併欄位或改用 `List>`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved