解决SqlTransaction用尽的问题(SQL处理超时)_MySQL
原访问数据库的代码为:
1SqlConnection conn = new SqlConnection(strConn);
2conn.Open();
3SqlTransaction trans = conn.BeginTransaction();
4try
5{
6 CEngine.ExecuteNonQuery(trans,CommandType.Text,sql);
7 trans.Commit();
8}
9catch(SqlException ex)
10{
11 trans.Rollback();
12 ErrorCode = ex.Number;
13 Info = "数据操作失败:" ex.Message;
14}
15finally
16{
17 trans.Dispose();
18 conn.Close();
19}
20
21
22
运行时,一旦出现数据量过大或者处理时间较长,则系统会提示出错。错误提示为“SqlTransaction已经用完;它再也不能使用。”
开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:
1SqlConnection conn = new SqlConnection(strConn);
2conn.Open();
3SqlTransaction trans = conn.BeginTransaction();
4try
5{
6 SqlCommand cmd = new SqlCommand();
7 cmd.CommandType = CommandType.Text;
8 //连接时限改为300秒
9 cmd.CommandTimeout = 300;
10 cmd.CommandText = sql;
11 cmd.Connection = conn;
12 cmd.Transaction = trans;
13 cmd.ExecuteNonQuery();
14 trans.Commit();
15}
16catch(SqlException ex)
17{
18 trans.Rollback();
19 ErrorCode = ex.Number;
20 Info = "数据操作失败:" ex.Message;
21}
22finally
23{
24 trans.Dispose();
25 conn.Close();
26}
修改后在测试,问题解决:)
推荐阅读
-
解决SqlTransaction用尽的问题(SQL处理超时)_MySQL
-
如何解决MySQL的master-slave模式中ReplicationDriver的使用问题 博客分类: My SQL MySQLJDBCSpring配置管理REST
-
解决MYSQL出现Can't create/write to file '#sql_5c0_0.MYD'的问题
-
mysql从执行.sql文件时处理\n换行的问题
-
解决MYSQL出现Can''t create/write to file ''#sql_5c0_0.MYD''的问题
-
解决MYSQL出现Can't create/write to file '#sql_5c0_0.MYD'的问题
-
mysql从执行.sql文件时处理\n换行的问题
-
解决MYSQL出现Can''t create/write to file ''#sql_5c0_0.MYD''的问题
-
查询sql遇到deadlock问题的解决_MySQL
-
处理MySQL主从库数据不一致的问题【Slave_SQL_Running: No】