我有三个SqlDataAdapter分别对应不同的三个表,一个用来插入,二个用来更新的,
我使用的是自动生成SQL命令的SqlCommandBuilder
我new SqlDataAdapter的时候没有使用SQLCOMMAND,而是使用SQL字符串的,
现在我想将对这三个表的修改加入一个事务中去,
我看了一下MSDN,发现都是需要SQLCOMMAND对象的,我不知道怎样从SqlDataAdapter引用到SqlDataAdapter,而且我也不知道如果能够引用到,是否能够让这三个表加入一个事务?我想下面的写法肯定有问题的,请问应该怎么写,多谢!
scAAA.Open();
SqlTransaction myTrans = scAAA.BeginTransaction();
sdaBBB.UpdateCommand.Transaction = myTrans;
sdaCCC.UpdateCommand.Transaction  = myTrans;
sdaDDD.InsertCommand.Transaction  = myTrans;

解决方案 »

  1.   

    他们的connection本来就指向一个就是上面的scAAA (SqlConnection的实例)protected SqlDataAdapter sdaBBB, sdaCCC,sdaDDD;但是下面这三句就报错了,sdaBBB.UpdateCommand.Transaction = myTrans;
    sdaCCC.UpdateCommand.Transaction  = myTrans;
    sdaDDD.InsertCommand.Transaction  = myTrans;
    异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
    因为我使用的是SqlAdapter.Update(..),是自动生成SQL命令来更新数据源的; 我也没有设置上面这三个对象的Command属性,我不知道是哪里有问题?
      

  2.   

    不用指定command的transaction 
    直接操作即可
    myTrans.Commit();
      

  3.   

    不用指定command的transaction 
    直接操作即可
    myTrans.Commit();
    但前提是你一定要把command的联接串指向一个sqlconnection
      

  4.   

    不好意思,我不是太懂( 刚接触ASP.NET和C#没几天:( )
    在生成我上面的三个SqlDataAdapter时,我没有显式的生成SqlCommand,也就是说我在构造SqlDataAdapter时,用的是SqlDataAdapter(String strCmd, String strConn);
    我不知道怎么  "把command的联接串指向一个sqlconnection"?
    所以我现在的程序用了事务后一执行到
                   SqlDataAdapte.Update(dataset,datatablename)
    时就报异常了   "该命令的 Transaction 属性尚未初始化" ??
    是不是一定要显示的构造SqlCommand 才可以使用事务?
      

  5.   

    哦,不对,我的用的是SqlDataAdapter(String strCmd,SqlConnection scAAA);
      

  6.   

    您的意思是不是要有一定要有三个显示的SqlCommand对象,再设置他们的属性为同一个SqlConnection?
      

  7.   

    在sql server中使用sp设置事务很方便