国产探花免费观看_亚洲丰满少妇自慰呻吟_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}
修改后在測試,問題解決:)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉中市| 清涧县| 喜德县| 恩平市| 高州市| 依兰县| 东乌珠穆沁旗| 云安县| 论坛| 怀化市| 承德县| 虎林市| 大庆市| 万荣县| 鄂托克前旗| 漯河市| 西充县| 武汉市| 长丰县| 南昌县| 呼玛县| 台湾省| 万州区| 靖宇县| 延安市| 嘉鱼县| 东宁县| 会昌县| 蕉岭县| 若羌县| 新邵县| 新竹市| 顺义区| 明溪县| 舞阳县| 扶沟县| 乌拉特后旗| 民权县| 萨迦县| 鲁甸县| 开原市|