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

C# DataGridView 數據批量寫入 Access MDB 完整示例

     編輯:程式設計綜合問答

核心思路

遍歷 DataGridView.Rows,構建參數化 INSERT 語句,使用 OleDbCommand 執行。參數化可防注入、處理特殊字符、提升性能。

完整代碼示例

using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

public void SaveDgvToMdb(DataGridView dgv, string mdbPath) {
    string connStr = $@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={mdbPath};";
    using (OleDbConnection conn = new OleDbConnection(connStr)) {
        conn.Open();
        // 假設表結構:ID(自增), Col1, Col2, Col3
        string sql = "INSERT INTO MyTable (Col1, Col2, Col3) VALUES (?, ?, ?)";
        using (OleDbCommand cmd = new OleDbCommand(sql, conn)) {
            // 預先添加參數,循環中只賦值
            cmd.Parameters.Add("@p1", OleDbType.VarWChar);
            cmd.Parameters.Add("@p2", OleDbType.VarWChar);
            cmd.Parameters.Add("@p3", OleDbType.VarWChar);

            foreach (DataGridViewRow row in dgv.Rows) {
                if (row.IsNewRow) continue; // 跳過新行佔位符
                cmd.Parameters["@p1"].Value = row.Cells[0].Value?.ToString() ?? "";
                cmd.Parameters["@p2"].Value = row.Cells[1].Value?.ToString() ?? "";
                cmd.Parameters["@p3"].Value = row.Cells[2].Value?.ToString() ?? "";
                cmd.ExecuteNonQuery();
            }
        }
    }
    MessageBox.Show("導入完成!");
}

關鍵點詳解

  • 連接字符串: .mdb 用 Microsoft.Jet.OLEDB.4.0;.accdb 用 Microsoft.ACE.OLEDB.12.0。
  • 參數化查詢: Access 使用 ? 作為位置參數,參數名(@p1)僅為代碼可讀性,順序必須與 SQL 一致。
  • 跳過 IsNewRow: DataGridView 允許用戶新增時最後一行 IsNewRow=true,寫入前必須過濾。
  • 空值處理: 使用 ?.ToString() ?? "" 防止 null 導致異常。
  • 事務優化(大數據量): 外層包裹 OleDbTransaction,批量提交可大幅提速。

事務版本片段

using (OleDbTransaction trans = conn.BeginTransaction()) {
    cmd.Transaction = trans;
    try {
        foreach (...) { cmd.ExecuteNonQuery(); }
        trans.Commit();
    } catch {
        trans.Rollback();
        throw;
    }
}

總結

參數化 + 事務是穩健高效寫入 Access 的標準模式,避免字符串拼接帶來的注入風險與格式錯誤。

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