大家好,又见面了,我是你们的朋友全栈君。
原访问数据库的代码为:

SqlConnection conn
=
new SqlConnection(strConn);
2
conn.Open
();
3
SqlTransaction trans =
conn.BeginTransaction();
4
try5
{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
finally16
{17
trans.Dispose();18
conn.Close
();
19
} 20

21

22
运行时,一旦出现数据量过大或者处理时间较长,则系统会提示
出错。错误提示为“
SqlTransaction
已经用完;它再也不能使用。
”
开始时,我怀疑是跟内存有关。因为系统需要做好事务回滚的准备,每执行一条插入或修改的SQL,都要有一定的开销,数据量一大,恐怕就吃不消了。不过我查了一下SQL SERVER的资料,未见提到内存的问题。
后来想到,数据库连接SqlTransaction有个时间问题。默认是15秒。数据量大的时候,这个时间很可能就不够了。于是改为:

SqlConnection conn
=
new SqlConnection(strConn);
2
conn.Open
();
3
SqlTransaction trans =
conn.BeginTransaction();
4
try5
{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
finally23
{24
trans.Dispose();25
conn.Close
();
26
}
修改后在测试,问题解决:)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145004.html原文链接:https://javaforall.net
