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

C# DataSet 動態新增 DataTable 並同步更新至資料庫(ADO.NET 完整流程)

     編輯:程式設計綜合問答

核心觀念

DataSet 是離線資料容器,新增 DataTable 後必須透過 SqlDataAdapter 的 InsertCommand / UpdateCommand 批次寫回資料庫。

完整步驟與程式碼

using (SqlConnection conn = new SqlConnection(connStr))
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Users", conn))
{
    // 1. 建立命令建構器,自動產生 Insert/Update/DeleteCommand
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

    // 2. 填充現有資料
    DataSet ds = new DataSet();
    adapter.Fill(ds, "Users");

    // 3. 動態新增 DataTable(或直接在既有 Table 新增 Row)
    DataTable newTable = new DataTable("Logs");
    newTable.Columns.Add("Id", typeof(int));
    newTable.Columns.Add("Msg", typeof(string));
    newTable.Rows.Add(1, "System started");
    ds.Tables.Add(newTable);

    // 4. 針對新 Table 另建 Adapter 寫入
    using (SqlDataAdapter logAdapter = new SqlDataAdapter("SELECT * FROM Logs WHERE 1=0", conn))
    {
        SqlCommandBuilder logBuilder = new SqlCommandBuilder(logAdapter);
        logAdapter.Update(ds, "Logs"); // 批次寫入
    }
}

關鍵注意事項

  • 資料庫中必須已存在對應資料表(Logs),或先執行 DDL 建表。
  • SqlCommandBuilder 需要資料表有主鍵,否則無法自動產生 Update/Delete 指令。
  • 大量資料建議使用 SqlBulkCopy 效能更佳。

替代方案:Entity Framework Core

若專案允許,改用 EF Core context.Database.EnsureCreated() + context.AddRange() + SaveChanges(),語法更簡潔、強型別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved