zoukankan      html  css  js  c++  java
  • 解决SqlTransaction用尽的问题

    解决SqlTransaction用尽的问题
      有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。
      我做的一个项目,是负责一个厂的考勤的。厂里有员工1000多号人。按每人每天打4次卡,一个月30天,则产生的考勤记录数目为1000 * 4 * 30 = 120,000条。在处理这些记录时,我采用的是生成SQL语句,然后
       SqlConnection conn = new SqlConnection(strConn);
       conn.Open();
       SqlTransaction trans = conn.BeginTransaction();
       try
       {
       CEngine.ExecuteNonQuery(trans, CommandType.Text, sql);
       trans.Commit();
       }
       catch(SqlException ex)
       {
       trans.Rollback();
       ErrorCode = ex.Number;
       Info = "数据操作失败:" + ex.Message;
       }
       finally
       {
       trans.Dispose();
       conn.Close();
       }
      
      但运行的时候却出错。错误提示为“SqlTransaction已经用完;它再也不能使用。”
      开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
      后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:
       SqlConnection conn = new SqlConnection(strConn);
       conn.Open();
       SqlTransaction trans = conn.BeginTransaction();
       try
       {
       SqlCommand cmd = new SqlCommand();
       cmd.CommandType = CommandType.Text;
       //连接时限改为300秒
       cmd.CommandTimeout = 300;
       cmd.CommandText = sql;
       cmd.Connection = conn;
       cmd.Transaction = trans;
      
       cmd.ExecuteNonQuery();
      
       trans.Commit();
       }
       catch(SqlException ex)
       {
       trans.Rollback();
       ErrorCode = ex.Number;
       Info = "数据操作失败:" + ex.Message;
       }
       finally
       {
       trans.Dispose();
       conn.Close();
       }
      问题解决。
  • 相关阅读:
    [Ramda] Create a Query String from an Object using Ramda's toPairs function
    UVA 10285 Longest Run on a Snowboard(记忆化搜索)
    为什么鲍尔默现在说要辞职?
    c++中经常需要访问对象中的成员的三种方式
    【实用技术】DreamWeaver常用快捷键
    Objective-C中NSString和NSMutableString的基本用法
    《数据通信与网络》笔记--IPSec
    最小费用最大流模板 poj 2159 模板水题
    UVa 10192: Vacation
    C++按值和按址传递对象的思考和优化
  • 原文地址:https://www.cnblogs.com/winner/p/1032607.html
Copyright © 2011-2022 走看看