解决SqlTransaction用尽的问题

解决SqlTransaction用尽的问题解决SqlTransaction用尽的问题有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。我做的一个项目,是负责一个厂的考勤的。厂里有员工1000多号人。按每人每天打4次卡,一个月30天,则产生的考勤记录数目为1000*4*30=120,000条。在处理这些记录时,我采用的办法是先生成SQL语句,然后执行这些SQL语句:Sql…

大家好,又见面了,我是你们的朋友全栈君。

解决SqlTransaction用尽的问题

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

我做的一个项目,是负责一个厂的考勤的。厂里有员工1000多号人。按每人每天打4次卡,一个月30天,则产生的考勤记录数目为1000 * 4 * 30 = 120,000条。在处理这些记录时,我采用的办法是先生成SQL语句,然后执行这些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的资料,未见提到内存的问题。

后来想到,数据库连接SqlConnection有个时间限制问题。默认是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();

}

问题解决。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136279.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 读取文本文件

    Java 读取文本文件FilePathFileReader和FileWriterInputStreamReader和OutputStreamWriterFileInputStream和FileOutputStreamBufferedReaderFileFile代表目录或者文件File类的实例是不可变的;也就是说,一旦创建,由File对象表示的抽象路径名将永远不会改变。下面…

    2022年6月21日
    26
  • 【tensorflow】浅谈什么是张量tensor

    【tensorflow】浅谈什么是张量tensor也许你已经下载了TensorFlow,而且准备开始着手研究深度学习。但是你会疑惑:TensorFlow里面的Tensor,也就是“张量”,到底是个什么鬼?也许你查阅了维基百科,而且现在变得更加困惑。也许你在NASA教程中看到它,仍然不知道它在说些什么?问题在于大多数讲述张量的指南,都假设你已经掌握他们描述数学的所有术语。别担心!我像小孩子一样讨厌数学,所以如果我能明白,你也可以!…

    2022年6月25日
    25
  • This cache store does not support tagging.

    This cache store does not support tagging.

    2021年10月26日
    44
  • [HOWTO] 扩展 Windows Server 2008 的评估期限

    [HOWTO] 扩展 Windows Server 2008 的评估期限

    2022年3月12日
    43
  • 信息审计服务器功能,服务器审计日志「建议收藏」

    信息审计服务器功能,服务器审计日志「建议收藏」服务器审计日志内容精选换一换Manager的审计日志默认保存在数据库中,如果长期保留可能引起数据目录的磁盘空间不足问题,管理员如果需要将审计日志保存到其他归档服务器,可以在FusionInsightManager设置转储参数及时自动转储,便于管理审计日志信息。若用户未配置审计日志转储,当审计日志达到十万条,系统自动将这十万条审计日志保存到文件中。保存路径为主管理节为加强对系统数据的容灾管理,云…

    2022年5月4日
    52
  • 阿里云Redis开发规范

    阿里云Redis开发规范

    2021年7月4日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号