国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

解決SqlTransaction用盡的問題(SQL處理超時)

2024-07-21 02:31:34
字體:
來源:轉載
供稿:網友

有時候程序處理的數據量比較小時,四平八穩,一切安然無恙,但數據量一大,原先潛伏的問題就暴露無遺了。
原訪問數據庫的代碼為:
 1SqlConnection conn = new SqlConnection(strConn);
 2conn.Open();
 3SqlTransaction trans = conn.BeginTransaction();
 4try
 5{
 6    CEngine.ExecuteNonQuery(trans,CommandType.Text,sql);
 7    trans.Commit();
 8}
 9catch(SqlException ex)
10{
11    trans.Rollback();
12    ErrorCode = ex.Number;
13    Info = "數據操作失敗:" + ex.Message;
14}
15finally
16{
17    trans.Dispose();
18    conn.Close();
19}
20
21
22
運行時,一旦出現數據量過大或者處理時間較長,則系統會提示出錯。錯誤提示為“SqlTransaction已經用完;它再也不能使用。”

開始時,我懷疑是跟內存有關。因為系統需要做好事務回滾的準備,每執行一條插入或修改的SQL,都要有一定的開銷,數據量一大,恐怕就吃不消了。不過我查了一下SQL SERVER的資料,未見提到內存的問題。
后來想到,數據庫連接SqlTransaction有個時間問題。默認是15秒。數據量大的時候,這個時間很可能就不夠了。于是改為:
 1SqlConnection conn = new SqlConnection(strConn);
 2conn.Open();
 3SqlTransaction trans = conn.BeginTransaction();
 4try
 5{
 6    SqlCommand cmd = new SqlCommand();
 7    cmd.CommandType = CommandType.Text;
 8    //連接時限改為300秒
 9    cmd.CommandTimeout = 300;
10    cmd.CommandText = sql;
11    cmd.Connection = conn;
12    cmd.Transaction = trans;
13    cmd.ExecuteNonQuery();
14    trans.Commit();
15}
16catch(SqlException ex)
17{
18    trans.Rollback();
19    ErrorCode = ex.Number;
20    Info = "數據操作失敗:" + ex.Message;
21}
22finally
23{
24    trans.Dispose();
25    conn.Close();
26}
修改后在測試,問題解決:)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴和县| 启东市| 广安市| 福鼎市| 承德市| 邢台市| 安丘市| 涞源县| 循化| 普兰县| 郧西县| 开江县| 得荣县| 舞阳县| 林口县| 东阿县| 梨树县| 安新县| 邹城市| 贵州省| 林州市| 台前县| 通州区| 郯城县| 宁晋县| 克山县| 铜陵市| 五莲县| 项城市| 合江县| 沐川县| 广河县| 吉隆县| 迁安市| 彰化市| 新泰市| 临泉县| 中江县| 乐山市| 乐山市| 桐城市|