解决SqlTransaction用尽的问题(SQL处理超时)

有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。
原访问数据库的代码为:
 1 SqlConnection conn  =  new SqlConnection(strConn);
 2 conn. Open ();
 3 SqlTransaction trans  =  conn.BeginTransaction();
 4 try
 5 {
 6     CEngine.ExecuteNonQuery(trans,CommandType. Text ,sql);
 7     trans. Commit ();
 8 }
 9 catch(SqlException ex)
10 {
11     trans. Rollback ();
12     ErrorCode  =  ex. Number ;
13     Info  =  "数据操作失败:"  +  ex.Message;
14 }
15 finally
16 {
17     trans.Dispose();
18     conn. Close ();
19
20
21
22

运行时,一旦出现数据量过大或者处理时间较长,则系统会提示出错。错误提示为“SqlTransaction已经用完;它再也不能使用。

开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:
 1 SqlConnection conn  =  new SqlConnection(strConn);
 2 conn. Open ();
 3 SqlTransaction trans  =  conn.BeginTransaction();
 4 try
 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 }
16 catch(SqlException ex)
17 {
18     trans. Rollback ();
19     ErrorCode  =  ex. Number ;
20     Info  =  "数据操作失败:"  +  ex.Message;
21 }
22 finally
23 {
24     trans.Dispose();
25     conn. Close ();
26 }

修改后在测试,问题解决:)
 

本文出自 “努力学习的小熊” 博客,转载请与作者联系!

你可能感兴趣的:(sql,数据库,超时,解决,休闲)