解决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是用于管理SQL Server数据库事务的对象,它是System.Data.SqlClient命名空间的一部分。事务处理在数据库操作中扮演着至关重要的角色,确保数据的一致性和完整性。本篇文章将详细探讨...
本案例将探讨如何利用Session和SqlTransaction对象来实现简单的事务管理,以及如何实现批量数据的整体上传。 首先,让我们理解什么是事务。在数据库系统中,事务是一系列操作的集合,这些操作要么全部执行,要么...
本实例以C++.NET为开发环境,通过源代码的方式,展示了如何解决这类问题。 首先,我们需要理解并发控制的基本概念。并发控制是在多用户环境中确保数据一致性的重要手段,它防止多个用户同时修改同一数据,导致数据...
7. **事务处理(Transaction)**:对于需要原子性的操作,可以使用SqlTransaction或TransactionScope类进行事务处理,确保数据的一致性。 8. **数据绑定(DataBinding)**:ADO.NET可以轻松地将数据绑定到UI控件,...
ASP.NET和数据库系统都有机制来检测和解决死锁问题。 在实际开发中,需要注意事务的使用会增加系统的开销,因此应尽量减少事务的范围,避免不必要的事务使用。同时,合理设置事务隔离级别可以有效防止并发问题,...
正确地记录和处理这些异常可以帮助快速定位和解决问题。 总结来说,C#操作SQL Server数据库时,需要关注连接、SQL语句、事务管理、存储过程、数据读写、性能优化以及错误处理等多个方面。理解这些知识点并熟练应用...
ado.net2.0的SqlTransaction使用方法 /////ado.net1.0中使用Transacation(事务) string connectionString = database=Northwind;pwd=admin;uid=sa;server=DATABASE-VPC\\SQL2005; using (SqlConnection conn = new...
在 .NET 中,你可以使用 SqlConnection 和 SqlTransaction 对象来管理和控制数据库事务。下面我们将深入探讨如何在 ADO.NET 中使用事务,以及相关的重要概念和最佳实践。 首先,开始事务需要调用 SqlConnection ...
C# 执行Transaction事务的一般例子,创建SqlTransaction 对象并用SqlConnection对象的BeginTransaction()方法开始事务,将Transaction属性设置为上面所生成的SqlTransaction对象。 运行环境:Visual Studio2010
public SqlTransaction Transaction { get { return this._transaction; } set { this._transaction = value; userdal.Transaction = value; //支持多个Dao的事务 groupdal.Transcation=value; } } ...
在Sql Server中,事务可以通过Sql语句、SqlTransaction和TransactionScope三种方法来实现。 一、Sql语句事务 Sql Server2005/2008提供了begin tran、commit tran和rollback tran三个语句来显示地使用事务。begin ...
- 如果出现了任何问题,则应该调用事务对象的`Rollback()`方法来回滚事务,撤销所有已执行的操作。 #### 四、示例代码 以下是一个简单的示例,展示了如何使用`SqlTransaction`来实现事务: ```csharp using ...
不同的隔离级别会影响到并发性能和可能出现的问题,如脏读、不可重复读和幻读。 五、总结 在C#中,事务处理是确保数据库操作安全性和一致性的核心手段。通过使用SqlTransaction,开发者可以在多条SQL语句执行失败时...
log explorer使用的几个问题 1)对数据库做了完全 差异 和日志备份 备份时选用了删除事务日志中不活动的条目 再用Log explorer打试图看日志时 提示No log recorders found that match the filter,would you like...
然而,需要注意的是,这些方法并没有处理所有的异常情况,例如SQL语句的语法错误或者数据库连接问题。在实际应用中,可能需要进一步完善异常处理,增加日志记录等,以提高程序的健壮性。 此外,尽管这些方法简化了...
3. 创建SqlTransaction对象,指定事务的级别(如ReadUncommitted, ReadCommitted, RepeatableRead, Snapshot等)。 4. 在事务中执行SQL命令(如SqlCommand对象的ExecuteNonQuery方法)。 5. 如果所有操作成功,提交...
* 使用 `SqlTransaction` 对象:这是最常用的方式,使用 `SqlTransaction` 对象可以实现事务处理。 * 使用 `TransactionScope` 对象:这是一个更高级的方式,使用 `TransactionScope` 对象可以实现事务处理,并且...
总之,这个"ADO.NET 4 入门到精通源代码"涵盖了数据库连接、查询、事务处理、数据操作等关键概念,同时通过修改日期格式解决了跨语言环境的问题。对于初学者来说,这是一个极好的学习资源,可以帮助他们深入了解ADO...
通过这样的实践,你不仅可以理解WebSQL的工作原理,还能了解如何在Node.js环境中利用它来解决实际问题。 总的来说,虽然WebSQL已经不再是Web开发的标准,但它仍然是一个值得学习的技术,特别是当你需要理解Web存储...