1
我嘗試用我的程序執行以下操作。 創建一個新的事務範圍,執行插入命令來執行日誌記錄,執行不同的命令來執行更新,然後故意引發異常。事務處理數據庫日誌記錄失敗
正如我所期望的更新命令回滾,但我如何提交插入命令?看起來插入命令也回滾了,但我想提交日誌記錄。
我不使用,也不想MSDTC。
class Program
{
private static string connectString1 = "myconnstring";
static void Main(string[] args)
{
try
{
var opt = new TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted,
Timeout = TransactionManager.MaximumTimeout
};
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, opt))
{
using (SqlConnection conn = new SqlConnection(connectString1))
{
conn.Open();
Logging(conn);
SqlCommand command1 = new SqlCommand("update Company set City='BP' where Id = 2", conn);
int aff = command1.ExecuteNonQuery();
throw null;
}
scope.Complete();
}
}
catch (Exception ex)
{
Console.WriteLine("Message: {0}", ex.Message);
}
}
public static void Logging(SqlConnection conn)
{
var opt = new TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted,
Timeout = TransactionManager.MaximumTimeout
};
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress, opt))
{
SqlCommand command2 = new SqlCommand("insert into ErrorLog(AppURL,Title,Message) values ('a','b','c')", conn);
int aff2 = command2.ExecuteNonQuery();
scope.Complete();
}
}
}
使用不同的事務記錄? – nos
無論我的事務是否回滾,我都想始終保持日誌記錄插入。這是一個簡化的例子,在生產代碼中,主要事務處理作用域中有幾種方法,都包含日誌記錄。 –