還原場景:
資料庫某個字段設定的長度是nvchar(10),可當時並不知曉啊......結果導致下單介面返回「將截斷字串或二進位制資料」,查了半天(下單引數實在太多)最終追蹤到某個字段長度不夠導致.....
因為內部有異常捕獲,所以呼叫方拿到了錯誤訊息!但更詭異的是:竟然生成了訂單資料,只不過字段不夠的那張表失敗了......
模擬**:
trylinq to sql 一次submitchange怎麼沒有rollback呢?也很久不用這個玩意了,我印象中一次submitchange就是獨立的乙個事務單元,可這是怎麼回事?百思不得其解,搞得我都有點懷疑人生......;t_users user = new t_users()
;db.t_classes.insertonsubmit(cs);
db.t_users.insertonsubmit(user);
db.submitchanges();}}
catch (exception ex)
於是開始使用sql server profiler追蹤submitchange之後最終執行的sql如下:
看了之後又是顛覆了我的三觀,為什麼沒有transcation,難道真的是我記錯了......
嘗試把第二個物件某個屬性賦值超過資料庫字段長度,看第乙個是否可以正常插入還是一起回滾:
try經過以上驗證,雖然沒有直**到事務,不過從最終的結果看確實是有事務的!但為什麼出現下單「將截斷字串或二進位制資料」?開始檢查**的前後呼叫流程,最終在發現乙個雷:在父類中開啟了乙個分布式事務,還原整個**情形意思如下:;t_users user = new t_users()
;db.t_classes.insertonsubmit(cs);
db.t_users.insertonsubmit(user);
db.submitchanges();}}
catch (exception ex)
using (transactionscope tran = new transactionscope())其原因顯而易見了,submitchanges沒有提交成功,transactionscope中complete提交了!;t_users user = new t_users()
;db.t_classes.insertonsubmit(cs);
db.t_users.insertonsubmit(user);
db.submitchanges();}}
catch (exception ex)
tran.complete();
}
關於transactionscope
記一次tomcat部署排錯經歷(jar衝突)
18 feb 2022 08 32 46.836 severe localhost startstop 1 org.apache.catalina.core.standardcontext.startinternal context ospflowcenter startup failed due ...
一次使用OCI的排錯經歷
使用vs c 2005 sp1 和oracle 10g的oci庫開發乙個應用程式。其中在連線資料庫伺服器呼叫ocienvcreate函式返回 1,開始百思不得其解,本想通過ocierrorget 函式獲取相關錯誤資訊。但聽公司一位高手說,ocienvcreate函式呼叫失敗,是無法使用ocierro...
記一次DHCP排錯
如拓撲,某業務整個網路劃分在乙個vlan之下,入網的終端裝置要接收來自dhcp伺服器的ip指派,業務正常,客戶開心,一切都顯得祥和安靜 忽然有一天,使用者的乙個動作打破了一切。他把終端的網線無情的插入到了路由的lan口,如此,路由器本身的dhcp發揮作用,混進了這個vlan。自此,這個vlan下廣播...