"此SqlTransaction已完成;它再也无法使用。" 是什莫原因?

ppp80 2004-12-14 09:49:56
我做了一个windows的服务
服务正常运行一段时间后,在ontimer中就无法再启动了,提示:此SqlTransaction已完成;它再也无法使用。

这是怎莫回事?什莫原因?
...全文
2254 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
marvelstack 2004-12-24
  • 打赏
  • 举报
回复
//你的代码在有异常的情况下出现问题.

Count=myAdapter.Update(TrafficDT);
myTransaction.Commit();
}
catch(Exception ex)
{
myTransaction.Rollback();//
throw ex;
}
thinhunan 2004-12-23
  • 打赏
  • 举报
回复
试试不写Open(),不知会不会自动Open
herony420 2004-12-23
  • 打赏
  • 举报
回复
已经commit或者已经rollback了
ppp80 2004-12-23
  • 打赏
  • 举报
回复
up
DataLife 2004-12-14
  • 打赏
  • 举报
回复
试试
try
{
SqlTransaction Trs;
Trs = sqlConnection.BeginTransaction();
try
{
DataAdapter1.Update(ds,"dt");
Trs.Commit();
}
catch(System.Exception e)
{
if(Trs != null)
{
Trs.Rollback();
}
throw new Exception(e.Message);
}
finally
{
if(Trs != null)
{
Trs.Dispose();
}
}
}
catch(System.Exception e)
{
throw new Exception(e.Message);
}
bootblack 2004-12-14
  • 打赏
  • 举报
回复
把open和BeginTransaction放到try里头去,并在catch里头添加回滚处理(如果事务开启)。
上面的方法或许对你的问题没帮助,但应该这么做。
Seeko0 2004-12-14
  • 打赏
  • 举报
回复
Commit之后,没有RollBack;

try{
...
trans.Commit();
}
catch(Exception err){
trans.RollBack();
throw err;

}

//没有RollBack ,如何确定你的trans有效呢?
ppp80 2004-12-14
  • 打赏
  • 举报
回复
这个服务能正常运行(比如时钟启动10000次),忽然就出这个错,重新启动服务就好了
如果如楼上所说,那末时钟启动一次就可能出错呀!
ppp80 2004-12-14
  • 打赏
  • 举报
回复
不是呀,Commit之后,断开了Connection,也重新BeginTransaction()
open();
string strSql=" ...";

SqlTransaction myTransaction=sqlConnection.BeginTransaction();

try
{
SqlCommand myCommand=sqlConnection.CreateCommand();
myCommand.Connection=sqlConnection;
myCommand.Transaction=myTransaction;
myCommand.CommandText=strSql;

SqlDataAdapter myAdapter=new SqlDataAdapter();
myAdapter.SelectCommand=myCommand;
SqlCommandBuilder myBuilder=new SqlCommandBuilder(myAdapter);
myAdapter.FillSchema(TrafficDT,SchemaType.Mapped);
....
Count=myAdapter.Update(TrafficDT);
myTransaction.Commit();
}
catch(Exception ex)
{

throw ex;
}
finally
{
close();
}
DataLife 2004-12-14
  • 打赏
  • 举报
回复
你的SqlTransaction 已经Commit或者RollBack之后,你又使用SqlTransaction所在的Connection去做Select、Insert、 Delete,就会出现这个错误。
CMIC 2004-12-14
  • 打赏
  • 举报
回复
SqlTransaction 使用了Commit()后就是不能在使用了,必须重新BeginTransaction()一个。
ppp80 2004-12-14
  • 打赏
  • 举报
回复
myTransaction.Rollback();
是写在catch里边了,是我刚才没贴全!

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧