有些時候我們的Log Table 會和原本的Table長得很相似(可能多幾個欄位而已)
小弟我程式還很菜,一直想說寫Log 就是要再重新Insert 一次 然後把值丟進去
但今天才突然學到有可以用Insert 中 先Select 的方法
string sqlCommand = @"
INSERT INTO TableALog
SELECT TOP 1
LogDate = @ModifyDate,
LogUserID = @ModifyUserId,
LogAction = 'D',
*
FROM TableA
WHERE ID= @ID
";
這樣就簡簡單單了阿
--------------------------------
額外補充,一次的連線要有2次以上的CRUD
一律都要用 TranscationScope 包住
可把 Log 這個Insert 裝成方法
在原本Delete的Dal Function 中 先用Transaction 包住原本Delete的Command
並在之前if 判斷 寫入Log 如果出錯 就return 也跑不到scope.Compelete
using (TransactionScope scope = new TransactionScope())
{
if (!InserAttachmentLog(Id))
{
scope.Dispose();
LogSet.LogError($"Invoke InserAttachmentLog() error. " );
return false;
}
#region 填入 sql command
string sqlCommand = @"
DELETE FROM TableA
WHERE ID= @ID
";
#endregion 填入 sql command
#region
object param = new
{
ID= ID
};
#endregion
scope.Complete();
return ExecuteCommand(sqlCommand, param);
}