業務需要從一個數據庫復制數據到另一個數據庫。當然可以一條一條的復制,但是兩個數據庫的表結構相同,通過操作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中的數據更新到數據庫中。
這只是一個小例子,有不當的地方,希望大家討論指正。
