您的位置:程序门 -> .net技术 -> c#



关于事务处理问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于事务处理问题[已结贴,结贴人:ym_yxl]
发表于:2007-01-03 15:49:42 楼主
我定了一个函数用于事务处理,不知怎么一直报这个错,请哪位大侠指正一下,
public   bool   updatedatabasewithtran(string   tempstr,string   connstr)
{
this.conn=new   sqlconnection(connstr);
conn.open();
sqltransaction   tx=conn.begintransaction();

sqlcommand   tempcmd=new   sqlcommand();
tempcmd.connection=conn;
tempcmd.commandtype=commandtype.text;
tempcmd.commandtext=tempstr;
try
{
          tempcmd.EXECutenonquery();
          tx.commit();
          conn.close();
          return   true;
}
catch(exception   ex)
{
tx.rollback();
messagebox.show(ex.message);
return   false;
}
}

错误为:
当分配给本地的连接处于挂起的本地事务时,命令必须具有事务对象才能执行。该命令的transaction属性尚未初始化。
发表于:2007-01-03 16:35:041楼 得分:5
sqltransaction   tx=conn.begintransaction();

sqlcommand   tempcmd=new   sqlcommand();

改为
sqlcommand   tempcmd=new   sqlcommand();
sqltransaction   tx=conn.begintransaction();
发表于:2007-01-03 16:51:432楼 得分:0
不对,改过还是报同样的错误!
发表于:2007-01-03 17:20:013楼 得分:5
将程序做一下修改:
sqltransaction   tx=null;
using   (tx=   conn.begintransaction())
{
      sqlcommand   tempcmd=new   sqlcommand();
tempcmd.connection=conn;
tempcmd.commandtype=commandtype.text;
tempcmd.commandtext=tempstr;
try
{
          tempcmd.EXECutenonquery();
          tx.commit();
          conn.close();
          return   true;
}
catch(exception   ex)
{
tx.rollback();
messagebox.show(ex.message);
return   false;
}
}
发表于:2007-01-03 17:30:414楼 得分:0
出错信息不说了吗。
sqlcommand.transaction没设
发表于:2007-01-03 17:31:535楼 得分:0
tempcmd.connection=conn;
tempcmd.transaction=conn.beingtransaction();
发表于:2007-01-03 23:27:026楼 得分:0
using   system.transaction;

xxxtableadapter   xxxta   =   new   xxxtableadapter();

using   (transactionscope   ts   =   new   transactionscope)
{
          xxxta.insert( "aa ", "bb ", "cc ");
          xxxta.update( "dd ", "ee ", "mm ", "cc ");

         
          ts.complete();   //完成transaction,成功就写,不然自动回滚.

}
改用.net   2.0吧..方便的很
发表于:2007-01-04 09:29:377楼 得分:5
汗,才发现楼主你忘了一关键东西,你的commandtext不是查询操作吧?
需要加一句:
tempcmd.transaction=tx;
这下肯定对了
发表于:2007-01-04 09:30:408楼 得分:0
因为你这个连接已经被事务占了,所以所有非查询操作都应该带着这个事务来执行
发表于:2007-01-04 09:31:459楼 得分:0
揭贴收分吧
发表于:2007-01-04 10:50:3810楼 得分:5
sqltransaction   tx=conn.begintransaction();

sqlcommand   tempcmd=new   sqlcommand();
tempcmd.connection=conn;
tempcmd.commandtype=commandtype.text;
tempcmd.commandtext=tempstr;
//加这样一句..
tempcmd.transaction=tx;


快速检索

最新资讯
热门点击