解决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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL常见的数据类型[通俗易懂]

       不多说,直接上干货!       MySQL常见的数据类型一、数据类型是什么?  数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。  有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等… 二、MYSQL常见数据类型  MySQL支持多种类型,大致可以…

    2022年4月5日
    45
  • c语言中实型标准,在C语言中的实型变量分为两种类型.docx

    c语言中实型标准,在C语言中的实型变量分为两种类型.docxPAGEPAGE PAGEPAGE 第二章练习题 填空题 1 在 C 语言中的实型变量分为两种类型 它们是 float1 2 若有定义 charc 010 则变量 c 中包含的字符个数为 3 已知字母 a 的 ASCII 码为十进制数 97 且设 ch 为整型变量 则表达式 ch a 8 3 的值为 4 在 C 语言中 以 16 位 PC 机为例 一

    2025年12月8日
    4
  • Tomcat 面试题(总结最全面的面试题!!!)

    Tomcat 面试题(总结最全面的面试题!!!)1、Tomcat是什么Tomcat是一个应用服务器,比方说,我有个web项目是想让他运行,就可以在运行在tomcat平台上,如果开启就可以运行访问,如果停掉tomcat服务,那么无法访问了2、Tomcat的默认端口是多少,怎么修改?8080修改方式:(1)找到Tomcat目录下的conf文件夹(2)进入conf文件夹里面找到server.xml文件(3)打开server.xml文件…

    2022年6月3日
    37
  • 基于pytorch卷积人脸表情识别–毕业设计「建议收藏」

    基于卷积神经网络的人脸表情识别前言毕业设计内容介绍卷积神经网络的设计卷积网络的模型卷积池化过程详细说明第一层卷积池化过程第二层卷积池化过程第三层卷积池化过程全连接层过程模型的训练过程卷积与池化原理模型如何训练模型的评估指标训练结果分析通过训练曲线分析通过混淆矩阵分析效果通过摄像头识别表情设计流程效果演示部分代码展示总结前言这篇文章记录一下我本科毕业设计的内容。我的课题是人脸表情识别,本来最开始按照历届学长的传统是采用MATLAB用传统的机器学习方法来实现分类的。但是鉴于我以前接触过一点点深度学习的内容,

    2022年4月11日
    161
  • 安卓CTS测试(测试手机性能的软件)

    CTS和GTS测试基本操作步骤    CTS全称CompatibilityTestSuite(兼容性测试),CTS的目的就是让各种Android设备(如手机)开发商能够开发出兼容性更好的Android设备,Google制定了CDD(CompatibilityDefinationDocument)规范,为了达到验证CDD规范的目的,提供了一组CASE给不同平台厂商进行验证,Andr…

    2022年4月10日
    75
  • 链家秋招内推编程笔试题目

    链家秋招内推编程笔试题目

    2022年3月6日
    40

发表回复

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

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