解决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();

}

问题解决。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • windows浏览器访问虚拟机开的rabbitmq服务,无法访问

    windows浏览器访问虚拟机开的rabbitmq服务,无法访问

  • Offline Explorer_手机chrome离线网页

    Offline Explorer_手机chrome离线网页提及离线浏览软件,我想大家都知道“元老级”的TeleportPro吧?一些网友可能还挺怀念的,毕竟它开了离线浏览之先河,为广大网友节省了不少银子,带来了不少便利,功不可没呵!然而时过境迁,“江山代有才人出”,一大批新的离线浏览软件登场了。这里我要向大家介绍的是一个设计全新的离线浏览软件——OfflineExplorer1.1。一、基本信息 OfflineExplorer1.1由MetaP…

  • 【OpenCV人脸识别入门教程之二】人脸检测

    【OpenCV人脸识别入门教程之二】人脸检测本篇文章主要介绍了如何使用OpenCV实现人脸检测的功能。要实现人脸识别功能,首先要进行人脸检测,判断出图片中人脸的位置,才能进行下一步的操作。人脸检测的方法介绍OpenCV中的方法函数参数含义代码实现

  • CodeBlocks 中文乱码解决方法「建议收藏」

    CodeBlocks 中文乱码解决方法「建议收藏」Windows下,按照安装步骤一步步来就行,由于之前不知道怎么设置错误,然后就出现中文乱码问题,出现找了很多方法,但都不合适,最后自己一点点摸索,无非就是尽量需找默认设置,步骤如下:(1)按照下图去选择(2)settings->globalcompilersettings点击一下resetdefaults,确定,就可以了!

  • Python IDE —— PyCharm的基本介绍「建议收藏」

    Python IDE —— PyCharm的基本介绍「建议收藏」本文由Markdown语法编辑器编辑完成。PyCharm的介绍:PyCharm是一款Python的IDE的编辑工具,它是由Jetbrains出品的产品。之前我在做Web项目,前端撰写JavaScript代码时,就是用的他们公司出品的前端开发神器WebStorm。因此,也一直对他们的产品很感兴趣,而且,如果是同一个公司的产品,在很多设置上都是相同的,也可以减少一些学习成本。PyCharm的官网地址

  • java 怎么把日期格式化时间_如何实现java日期格式化?

    小编典典使用LocalDateTime#parse()(或ZonedDateTime#parse()如果字符串恰巧包含时区部分)将String特定模式中的解析为LocalDateTime。Stringoldstring=”2011-01-1800:00:00.0″;LocalDateTimedatetime=LocalDateTime.parse(oldstring,DateTim…

发表回复

您的电子邮箱地址不会被公开。

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