業務需要從一個數據庫復制數據到另一個數據庫。當然可以一條一條的復制,但是兩個數據庫的表結構相同,通過操作DataSet批量復制數據到另一個數據庫,不管從開發效率還是執行效率上來說是不是更好一些呢。
需要注意的點,如下:
1、數據庫中必須有主鍵,這樣才便於增刪改查;
2、SqlDataAdapter必須放在SqlCommandBuilder中,以用於批量執行DataSet中的修改;
3、修改后的DataSet需執行AcceptChanges()方法后,才能更新DataSet,以便於下一步操作;
4、SqlDataAdapter執行Update的數據庫不一定是Fill的數據庫,只要表結構相同即可。
示例代碼如下:
public void CopyData(DataSet ds, string conString, string sql, string tableName) { SqlConnection conn = new SqlConnection(conString); try { conn.Open(); SqlDataAdapter ada = new SqlDataAdapter(sql, conn); SqlCommandBuilder cb = new SqlCommandBuilder(ada); DataSet destDataSet = new DataSet(); ada.Fill(destDataSet, tableName); //Delete Rows foreach (DataRow item in destDataSet.Tables["Pattern"].Rows) { item.Delete(); } DataTable dt = null; dt = destDataSet.Tables["Pattern"].GetChanges(); if (dt != null) { ada.Update(dt); } //Insert Rows foreach (DataRow item in ds.Tables["Pattern"].Rows) { item.SetAdded(); } dt = ds.Tables["Pattern"].GetChanges(); if (dt != null) { ada.Update(dt); } } catch (Exception ex) { throw ex; } finally { conn.Close(); } }
這是一個復制數據庫的方法,功能為刪除掉原有數據庫中的數據,然后根據傳過來的DataSet,把DataSet中的數據更新到數據庫中。
這只是一個小例子,有不當的地方,希望大家討論指正。