`
totoxian
  • 浏览: 1075785 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

解决SqlTransaction用尽的问题

阅读更多

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

}

问题解决。

分享到:
评论

相关推荐

    c#中SqlTransaction——事务详解

    在C#中,SqlTransaction是用于管理SQL Server数据库事务的对象,它是System.Data.SqlClient命名空间的一部分。事务处理在数据库操作中扮演着至关重要的角色,确保数据的一致性和完整性。本篇文章将详细探讨...

    asp.net 中事务处理案例

    本案例将探讨如何利用Session和SqlTransaction对象来实现简单的事务管理,以及如何实现批量数据的整体上传。 首先,让我们理解什么是事务。在数据库系统中,事务是一系列操作的集合,这些操作要么全部执行,要么...

    处理多用户更新数据并发问题 编程小实例

    本实例以C++.NET为开发环境,通过源代码的方式,展示了如何解决这类问题。 首先,我们需要理解并发控制的基本概念。并发控制是在多用户环境中确保数据一致性的重要手段,它防止多个用户同时修改同一数据,导致数据...

    ADO .NET解决方案开发的经验参考

    7. **事务处理(Transaction)**:对于需要原子性的操作,可以使用SqlTransaction或TransactionScope类进行事务处理,确保数据的一致性。 8. **数据绑定(DataBinding)**:ADO.NET可以轻松地将数据绑定到UI控件,...

    ASP.NET事务处理

    ASP.NET和数据库系统都有机制来检测和解决死锁问题。 在实际开发中,需要注意事务的使用会增加系统的开销,因此应尽量减少事务的范围,避免不必要的事务使用。同时,合理设置事务隔离级别可以有效防止并发问题,...

    C#操作SQLServer数据库的错误分析

    正确地记录和处理这些异常可以帮助快速定位和解决问题。 总结来说,C#操作SQL Server数据库时,需要关注连接、SQL语句、事务管理、存储过程、数据读写、性能优化以及错误处理等多个方面。理解这些知识点并熟练应用...

    C#编程之事务用法

    ado.net2.0的SqlTransaction使用方法 /////ado.net1.0中使用Transacation(事务) string connectionString = database=Northwind;pwd=admin;uid=sa;server=DATABASE-VPC\\SQL2005; using (SqlConnection conn = new...

    ADO.NET事务.docx

    在 .NET 中,你可以使用 SqlConnection 和 SqlTransaction 对象来管理和控制数据库事务。下面我们将深入探讨如何在 ADO.NET 中使用事务,以及相关的重要概念和最佳实践。 首先,开始事务需要调用 SqlConnection ...

    C# 执行Transaction事务的一般例子

    C# 执行Transaction事务的一般例子,创建SqlTransaction 对象并用SqlConnection对象的BeginTransaction()方法开始事务,将Transaction属性设置为上面所生成的SqlTransaction对象。 运行环境:Visual Studio2010

    基于.net sql server的连接池管理(支持事务管理)类库

    public SqlTransaction Transaction { get { return this._transaction; } set { this._transaction = value; userdal.Transaction = value; //支持多个Dao的事务 groupdal.Transcation=value; } } ...

    Sql Server数据库事务介绍

    在Sql Server中,事务可以通过Sql语句、SqlTransaction和TransactionScope三种方法来实现。 一、Sql语句事务 Sql Server2005/2008提供了begin tran、commit tran和rollback tran三个语句来显示地使用事务。begin ...

    一个简单的方法来实现数据库的事务

    - 如果出现了任何问题,则应该调用事务对象的`Rollback()`方法来回滚事务,撤销所有已执行的操作。 #### 四、示例代码 以下是一个简单的示例,展示了如何使用`SqlTransaction`来实现事务: ```csharp using ...

    C#操作事务

    不同的隔离级别会影响到并发性能和可能出现的问题,如脏读、不可重复读和幻读。 五、总结 在C#中,事务处理是确保数据库操作安全性和一致性的核心手段。通过使用SqlTransaction,开发者可以在多条SQL语句执行失败时...

    Log Explorer for SQL Server v4.22 含注册机

    log explorer使用的几个问题 1)对数据库做了完全 差异 和日志备份 备份时选用了删除事务日志中不活动的条目 再用Log explorer打试图看日志时 提示No log recorders found that match the filter,would you like...

    自己写的实现数据库事务的简单方法ExecuteSqlTran.doc

    然而,需要注意的是,这些方法并没有处理所有的异常情况,例如SQL语句的语法错误或者数据库连接问题。在实际应用中,可能需要进一步完善异常处理,增加日志记录等,以提高程序的健壮性。 此外,尽管这些方法简化了...

    C#调用SQL Server事务的简单实例

    3. 创建SqlTransaction对象,指定事务的级别(如ReadUncommitted, ReadCommitted, RepeatableRead, Snapshot等)。 4. 在事务中执行SQL命令(如SqlCommand对象的ExecuteNonQuery方法)。 5. 如果所有操作成功,提交...

    c# 事务的写法一看就会写

    * 使用 `SqlTransaction` 对象:这是最常用的方式,使用 `SqlTransaction` 对象可以实现事务处理。 * 使用 `TransactionScope` 对象:这是一个更高级的方式,使用 `TransactionScope` 对象可以实现事务处理,并且...

    DO.NET 4 入门到精通源代码(修改了DB Script)

    总之,这个"ADO.NET 4 入门到精通源代码"涵盖了数据库连接、查询、事务处理、数据操作等关键概念,同时通过修改日期格式解决了跨语言环境的问题。对于初学者来说,这是一个极好的学习资源,可以帮助他们深入了解ADO...

    Node.js-关于WebSQLDatabase的练习

    通过这样的实践,你不仅可以理解WebSQL的工作原理,还能了解如何在Node.js环境中利用它来解决实际问题。 总的来说,虽然WebSQL已经不再是Web开发的标准,但它仍然是一个值得学习的技术,特别是当你需要理解Web存储...

Global site tag (gtag.js) - Google Analytics