解决SqlTransaction用尽的问题(SQL处理超时)
2006-02-19 14:00
253 查看
有时候程序处理的数据量比较小时,四平八稳,一切安然无恙,但数据量一大,原先潜伏的问题就暴露无遗了。
原访问数据库的代码为:
1
SqlConnection conn = new SqlConnection(strConn);
2
conn.Open();
3
SqlTransaction trans = conn.BeginTransaction();
4
try
5
{
6
CEngine.ExecuteNonQuery(trans,CommandType.Text,sql);
7
trans.Commit();
8
}
9
catch(SqlException ex)
10
{
11
trans.Rollback();
12
ErrorCode = ex.Number;
13
Info = "数据操作失败:" + ex.Message;
14
}
15
finally
16
{
17
trans.Dispose();
18
conn.Close();
19
}
20
21
22
运行时,一旦出现数据量过大或者处理时间较长,则系统会提示出错。错误提示为“SqlTransaction已经用完;它再也不能使用。”
开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:
1
SqlConnection conn = new SqlConnection(strConn);
2
conn.Open();
3
SqlTransaction trans = conn.BeginTransaction();
4
try
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
}
16
catch(SqlException ex)
17
{
18
trans.Rollback();
19
ErrorCode = ex.Number;
20
Info = "数据操作失败:" + ex.Message;
21
}
22
finally
23
{
24
trans.Dispose();
25
conn.Close();
26
}
修改后在测试,问题解决:)
原访问数据库的代码为:
1
SqlConnection conn = new SqlConnection(strConn);
2
conn.Open();
3
SqlTransaction trans = conn.BeginTransaction();
4
try
5
{
6
CEngine.ExecuteNonQuery(trans,CommandType.Text,sql);
7
trans.Commit();
8
}
9
catch(SqlException ex)
10
{
11
trans.Rollback();
12
ErrorCode = ex.Number;
13
Info = "数据操作失败:" + ex.Message;
14
}
15
finally
16
{
17
trans.Dispose();
18
conn.Close();
19
}
20
21
22
运行时,一旦出现数据量过大或者处理时间较长,则系统会提示出错。错误提示为“SqlTransaction已经用完;它再也不能使用。”
开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:
1
SqlConnection conn = new SqlConnection(strConn);
2
conn.Open();
3
SqlTransaction trans = conn.BeginTransaction();
4
try
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
}
16
catch(SqlException ex)
17
{
18
trans.Rollback();
19
ErrorCode = ex.Number;
20
Info = "数据操作失败:" + ex.Message;
21
}
22
finally
23
{
24
trans.Dispose();
25
conn.Close();
26
}
修改后在测试,问题解决:)
相关文章推荐
- 解决SqlTransaction用尽的问题(SQL处理超时)
- 解决SqlTransaction用尽的问题(SQL处理超时)
- 解决SqlTransaction用尽的问题(SQL处理超时)
- sql 大数据库 插入超时问题解决
- php使用mysql-timeout包,解决sql语句查询超时问题
- PL/Sql 连接数据库 超时问题解决
- ORA-02049: 超时: 分布式事务处理等待锁 问题的解决
- 如何解决java.sql.Statement无法处理特殊字符以及容易被黑问题
- 从sql库里读取二进制图片的问题 (参数无效 未处理ArgumentException 错误的解决办法)
- 解决SqlTransaction用尽的问题
- 解决 C#中 SQL脚本执行超时 问题
- .net 代码解决SQL查询超时问题
- 解决SqlTransaction用尽的问题
- C# SQL语句执行时间过长在操作完成之前超时时间已过或服务器未响应问题的解决
- 解决SqlTransaction用尽的问题
- MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)
- SQL Server '已超过了锁请求超时时段' 问题解决方法
- SQL连接超时 问题解决方法一
- 如何解决Connect超时导致的阻塞问题
- sql 导入数据库 出现乱码问题 解决办法 设置 --default-character-set=utf8