想下面这段代码,在winform里执行什么问题都没有,用在web services 上就执行不过,到了update就出错,适配器,数据库连接在winform,web services的设置都一样,不知道问题出在哪,还请高手指点                        
                           System.Data.SqlClient.SqlTransaction mytrans;
this.sqlConnection1.Open();
mytrans=this.sqlConnection1.BeginTransaction();
this.sqlInsertCommand1.Transaction=mytrans;
this.sqlDeleteCommand1.Transaction=mytrans;
this.sqlUpdateCommand1.Transaction=mytrans;
this.sqlDeleteCommand2.Transaction=mytrans;
this.sqlInsertCommand2.Transaction=mytrans;
this.sqlUpdateCommand2.Transaction=mytrans;
try
{
this.sqlDataAdapter1.Update(ds.Tables[0]);
this.sqlDataAdapter2.Update(ds.Tables[1]);
mytrans.Commit();
}
catch(Exception ee)
{
mytrans.Rollback();
}
finally
{
this.sqlConnection1.Close();
}

解决方案 »

  1.   

    webservice中,你的ds.Tables还存在吗?我的意思是说,如果你在获得dataset的方法是调用一个函数,而执行上面update又是在另外一个函数,那么就会出现你所遇到的问题,因为是两次函数调用,会使得前面获得dataset不能在后面update函数中用,即使dataset是全局变量。
      

  2.   

    不存在函数调用的问题,因为我去掉事务,只写这两行:
    this.sqlDataAdapter1.Update(ds.Tables[0]);
    this.sqlDataAdapter2.Update(ds.Tables[1]);
    执行是没问题的,结果也正确(不过没事务的话有时会导致Tables[0]更新了,Tables[1]没更新,要求是两个表一起更新)
      

  3.   

    如果这样的话,你设置一下SqlTransaction的IsolationLevel,例如:
    myTrans = sqlConn.BeginTransaction(IsolationLevel.Serializable,
    "MyTransaction");