Skip to content

Instantly share code, notes, and snippets.

@relyky
Created November 18, 2015 03:50
Show Gist options
  • Save relyky/d4e4f58aa9a88e8c095b to your computer and use it in GitHub Desktop.
Save relyky/d4e4f58aa9a88e8c095b to your computer and use it in GitHub Desktop.
TransactionScope 範例,可依此模式設計多資料庫連線的 tow phase transaction。
//# 建立TransactionScope
using (TransactionScope Ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 10, 0)))
{
//# 建立DB連線,一個TransactionScope下可有多個DB連線。
using (SqlConnection conn = new SqlConnection(mDB_ConnString))
{
conn.Open();
//# 以下為商業邏輯
// get current database datetime, 'yyyy-mm-dd HH:mm:ss'
SqlCommand cmd = new SqlCommand("SELECT Convert(Varchar,GetDate(), 120)", conn);
//cmd.CommandTimeout = 600;
string curDbDtm = (string)cmd.ExecuteScalar(); // current database datetime.
// backup
cmd = new SqlCommand("INSERT INTO <Taget_Table_Backup> SELECT @BakDtm, * FROM <Target_Table>;", conn);
cmd.Parameters.AddWithValue("@BakDtm", curDbDtm);
cmd.ExecuteNonQuery();
// delete
cmd = new SqlCommand("DELETE FROM <Target_Table> ", conn);
cmd.ExecuteNonQuery();
// insert new data to DB
BulkCopy_<Target_Table>(dtSource, conn);
}
//# Commit
Ts.Complete();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment