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

解决SqlTransaction用尽的问题(SQL处理超时)有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。原访问数据库的代码为: 1SqlConnection conn = new SqlConnection(strConn); 2conn.Open(); 3SqlTransaction trans = conn.BeginTransaction(); 4try 5{ 6    CEngine.Exe…

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

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

 1
None.gif
SqlConnection conn 
=
 new SqlConnection(strConn);

 2
None.gifconn.
Open
();

 3
None.gifSqlTransaction trans 
=
 conn.BeginTransaction();

 4
None.giftry

 5
None.gif{


 6
None.gif    CEngine.ExecuteNonQuery(trans,CommandType.
Text
,sql);

 7
None.gif    trans.
Commit
();

 8
None.gif}

 9
None.gifcatch(SqlException ex)

10
None.gif{


11
None.gif    trans.
Rollback
();

12
None.gif    ErrorCode 
=
 ex.
Number
;

13
None.gif    Info 
=
 “数据操作失败:” 
+
 ex.Message;

14
None.gif}

15
None.giffinally

16
None.gif{


17
None.gif    trans.Dispose();

18
None.gif    conn.
Close
();

19
None.gif

20
None.gif

21
None.gif

22
None.gif

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

开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:

 1
None.gif
SqlConnection conn 
=
 new SqlConnection(strConn);

 2
None.gifconn.
Open
();

 3
None.gifSqlTransaction trans 
=
 conn.BeginTransaction();

 4
None.giftry

 5
None.gif{


 6
None.gif    SqlCommand cmd 
=
 new SqlCommand();

 7
None.gif    cmd.CommandType 
=
 CommandType.
Text
;

 8
None.gif    
//
连接时限改为300秒

 9
None.gif    cmd.CommandTimeout 
=
 
300
;

10
None.gif    cmd.CommandText 
=
 sql;

11
None.gif    cmd.Connection 
=
 conn;

12
None.gif    cmd.
Transaction
 
=
 trans;

13
None.gif    cmd.ExecuteNonQuery();

14
None.gif    trans.
Commit
();

15
None.gif}

16
None.gifcatch(SqlException ex)

17
None.gif{


18
None.gif    trans.
Rollback
();

19
None.gif    ErrorCode 
=
 ex.
Number
;

20
None.gif    Info 
=
 “数据操作失败:” 
+
 ex.Message;

21
None.gif}

22
None.giffinally

23
None.gif{


24
None.gif    trans.Dispose();

25
None.gif    conn.
Close
();

26
None.gif}

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

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

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

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

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

(0)


相关推荐

  • 安卓短信转发qq邮箱

    安卓短信转发qq邮箱fork一个github项目简介准备工作Tips简介最近不怎么带手机,所以收不到一些验证码什么的,所以想搞一个app放手机上将短信以有邮件的形式发送到指定邮箱,然后用电脑查看邮件,这样就可以不用带手机了。在github上找到一个项目叫sms-backup-plus,于是准备在这个项目的基础上进行更改。准备工作安装androidStudio学习kotlin怎么整合java和k…

  • VMware下载安装教程(vbox虚拟机安装教程)

    全网最详细的VMware虚拟机下载安装教程第一步下载虚拟机1.进入VMware官网,点击左侧导航栏中的下载,选择下拉列表中的产品下载,再点击图中标记的WorkstationPro,如下图所示。2.选择自己需要的版本和操作系统,在这里以Windows系统为例,点击转至下载,如下图所示。-3.点击转至下载后也在此处可以选择版本。选择好版本后点击立即下载。如下图所示。4.注意,需要登录之后才能下载。若无账号可点击注册后登录。如下图所示。二、安装虚拟机1.进入下载路径,双击.

  • csgo新出的开箱网站_csgo网站开箱推荐

    csgo新出的开箱网站_csgo网站开箱推荐2021csgo开箱网站有哪些?2021最新收集的CSGO国内网页开箱子网站大全!##以下国内知名CSGO开箱网站大全官网直达链接优惠码/推广码网站状态incsgocsgogo直接取回skinsdogcsgogo直接取回npskinscsgogo直接取回fateskinscsgo直接取回box818csgo直接取回piggycasecsgogo可取回yskins暂无可取回88steamcsgo可取回c

  • fastJson String转Map[通俗易懂]

    fastJson String转Map[通俗易懂]1、引入依赖<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency>2、JSONOb…

  • Ffmpeg安装_linux离线安装ffmpeg

    Ffmpeg安装_linux离线安装ffmpeg目录安装包下载解压安装包配置环境变量总结安装包下载作为音视频处理重要软件ffmpeg,是一定要装好的。windows安装包下在链接:资源包地址解压安装包下载安装包后解压到需要的目录。配置环境变量找到控制面板->点击系统->点击高级系统设置->点击环境变量配置解压或文件夹路劲到Path变量中。一直确认后,点击win+r打开cmd。输入ffmpeg-i命令验证一下是..

  • python hashlib模块安装_python hashlib 模块

    python hashlib模块安装_python hashlib 模块hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法。在python3中已经废弃了md5和sha模块什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。摘要算法就是通过摘要函数f()对任意长度的数据data计算出…

发表回复

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

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