跨數據庫異構遷移常見場景:從 SQL Server 按條件查詢數據,批量插入 Access (.mdb/.accdb)。核心思路:SqlDataAdapter.Fill(DataTable) 取數 → 遍歷 DataRow 構建參數化 OleDbCommand 寫入 Access。
DataTable dt = new DataTable();
using (var sqlConn = new SqlConnection(sqlConnStr)) {
sqlConn.Open();
new SqlDataAdapter("SELECT col1,col2 FROM src_tbl WHERE cond", sqlConn).Fill(dt);
}
using (var accConn = new OleDbConnection(accConnStr)) {
accConn.Open();
foreach (DataRow row in dt.Rows) {
string sql = "INSERT INTO dst_tbl (col1,col2) VALUES (?,?)";
using (var cmd = new OleDbCommand(sql, accConn)) {
cmd.Parameters.AddWithValue("@p1", row["col1"]);
cmd.Parameters.AddWithValue("@p2", row["col2"]);
cmd.ExecuteNonQuery();
}
}
}
INSERT INTO ... VALUES (...),(...),... 可大幅提速OleDbTransaction 保證原子性datetime → Access DateTime、bit → Yes/No 轉換SqlBulkCopy 導出 CSV 再 DoCmd.TransferText 導入防止注入、自動處理日期/字符串格式、避免拼接錯誤。切勿使用字符串拼接構建 SQL。