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

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。

原访问数据库的代码为:

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}

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航