PS:
同一個(gè)連接
的判斷是按照string.Equals
比較的雳锋,任何選項(xiàng)前后變化购公、大小寫變化、甚至空格都會(huì)影響判斷(非秤脖希坑)
可在連接字符串中增加選項(xiàng)Enlist=false
來(lái)禁止使用分布式事務(wù)
參考:
事務(wù)支持 - ADO.NET | Microsoft Learn
分布式事務(wù) - ADO.NET | Microsoft Learn
1. 無(wú)法提升帶有 IsolationLevel 快照的的事務(wù)锄弱。
步驟:
- 開啟事務(wù)
Snapshot
級(jí)別- 打開數(shù)據(jù)庫(kù)A (無(wú)論是否關(guān)閉考蕾,下同)
- 開啟子事務(wù),任意級(jí)別
- 打開數(shù)據(jù)庫(kù)B会宪,報(bào)錯(cuò) (這里打開數(shù)據(jù)庫(kù)A不會(huì)報(bào)錯(cuò))
var db1 = ".....DataBase=A;";
var db2 = ".....DataBase=B;";
using (var trans1 = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Snapshot }))
{
using (var conn1 = new SqlConnection(db1))
{
conn1.Open();
}
using (var trans2 = new TransactionScope())
{
using (var conn2 = new SqlConnection(db2))
{
conn2.Open(); // 報(bào)錯(cuò)
}
}
}
2. 為 TransactionScope 指定的事務(wù)所具有的 IsolationLevel 與為該范圍請(qǐng)求的值不同肖卧。
步驟:
- 開啟事務(wù)任意級(jí)別
- 打開任意數(shù)據(jù)庫(kù)
- 開啟子事務(wù),與父事務(wù)級(jí)別不同
- 打開任意數(shù)據(jù)庫(kù)B掸鹅,報(bào)錯(cuò)
var db1 = ".....DataBase=A;";
using (var trans1 = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
using (var conn1 = new SqlConnection(db1))
{
conn1.Open();
}
using (var trans2 = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable }))
{
using (var conn2 = new SqlConnection(db1))
{
conn2.Open(); // 報(bào)錯(cuò)
}
}
}
3. 該事務(wù)管理器已經(jīng)禁止了它對(duì)遠(yuǎn)程/網(wǎng)絡(luò)事務(wù)的支持塞帐。
步驟:
- 開啟事務(wù)任意級(jí)別
- 打開數(shù)據(jù)庫(kù)A
- 打開數(shù)據(jù)庫(kù)B拦赠,報(bào)錯(cuò)
var db1 = ".....DataBase=A;";
var db2 = ".....DataBase=B;";
using (var trans1 = new TransactionScope(TransactionScopeOption.Required))
{
using (var conn1 = new SqlConnection(db1))
{
conn1.Open();
}
using (var conn2 = new SqlConnection(db2))
{
conn2.Open(); // 報(bào)錯(cuò)
}
}