解决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}

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

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

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

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


相关推荐

  • Intellij IDEA 安装lombok及使用详解

    Intellij IDEA 安装lombok及使用详解项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,虽然eclipse和idea开发环境下都有自动生成的快捷方式,但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok则不一样,使用了lombok的注解(@Setter,@Getter,@ToString,@@RequiredArgsConstructor,@EqualsAndHas

    2022年6月17日
    167
  • adb 安装应用程序「建议收藏」

    adb 安装应用程序「建议收藏」应用程序安装-将一个包推送到设备上并安装它。 adbinstalltest.apk APP安装-将多个APK推送到一个包的设备上并安装它们 adbinstall-multipletest.apktest2.apk 应用程序安装-将一个或多个包推送到设备上,并以原子方式安装它们。 adbinstall-multi-packagetest.apkdemo.apk 替换现有应用程序 重新安装现有的应用…

    2022年5月16日
    47
  • 什么是ARM?_arm开发板

    什么是ARM?_arm开发板原文一、ARM是什么?ARM既可以认为是一个公司的名字,也可以认为是对一类处理器的统称,还可以认为是一种技术的名字。ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可,由合作公司生产各具特色的芯片。ARM处理器的内核是统一的,由ARM公司提供,而片内部件则是多样的,由各大半导体公司设计,这使得ARM设计嵌入式系统的时候,可以基于同样的核心,使用不同的片内外设,从而具有很大的优势。二、ARM内核与架构

    2022年10月14日
    0
  • Potplayer + LAVFilters + madVR 配置教程

    Potplayer + LAVFilters + madVR 配置教程文章目录Potplayer+LAVFilters+madVR配置教程工具安装篇设置调教1.potplayer播放器设置加载LAVFilters和madVR1.选择“源滤镜/分离器”选项,选择“滤镜/解码器管理”2.“添加外部滤镜”3.浏览到刚才LAVFilters解压的文件夹,分别添加图示项。4.添加后回到管理界面设置,点击左边的”LAVAudioDecoder”,将右边”音频解码器”…

    2022年5月22日
    301
  • 【转载文章】windows批处理命令教程_____附加自己学习笔记

    【转载文章】windows批处理命令教程_____附加自己学习笔记https://www.jb51.net/article/41322.htm批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为.bat或.cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的…

    2022年8月22日
    3
  • Linux如何添加路由_linux添加永久路由命令

    Linux如何添加路由_linux添加永久路由命令Linux如何添加路由a.如何使用命令给Linux添加一个默认网关?缺省网关路由:默认网关就是数据包不匹配任何的路由规则,最后流经的地址关口!网关按字面意思就是网络的关口,就相当于我们办公室的大门一样,大家上班就要经过办公室的门一样。使用route-n查看网关信息,或者netstat-rn查看路由[root@machine1~]#route-nKernel

    2022年9月27日
    0

发表回复

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

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