给你个例子
SqlConnection conn = new SqlConnection(".....");
SqlTransaction tran = conn.BeginTransaction("yourtransaction");
SqlCommand command = new SqlCommand();
command.Connection = tran.Connection;
command.Transaction = tran;
command.CommandText = ".....";
try
{
  command.ExecuteNonQuery();
  tran.Commit();
}
catch
{
  tran.Rollback("yourtransaction");
}

解决方案 »

  1.   

    ......//前面设略xx字
    conn.open();
    SqlTransaction myTrans = conn.BeginTransaction(IsolationLevel.ReadCommitted, "MyTransaction");
    string sqlStr = "insert into ......";
    SqlCommand cmd = new SqlCommand(sqlStr, conn, myTrans);
    try
    {
      cmd.ExecuteNonQuery();
      //在这里“向职工表插入一条职工记录,得到ID”
    }
    catch(Exception e)
    {
      myTrans.Rollback("MyTransaction");
      conn.Close();
    }......
    //使用相同的方法再往工作岗位表中插入刚刚加入的这条职工记录的IDmyTrans.Commit();
    conn.Close();//你想要的是这个吗?
      

  2.   

    Imports System
    Imports System.Data
    Imports System.Data.SqlClientnamespace HowTo.Samples.ADONETpublic class dbtransactionswithacommand
      public shared sub Main()
        Dim mydbtransactionswithacommand as dbtransactionswithacommand
        mydbtransactionswithacommand = new dbtransactionswithacommand()
        mydbtransactionswithacommand.Run()
      end sub  public sub Run()    Dim myConnection as SQLConnection = new SQLConnection("server=(local)\NetSDK;Trusted_Connection=yes;database=northwind")
        Dim myCommand as SQLCommand = new SqlCommand()
        Dim myTrans as SqlTransaction    ' Open the connection.
        myConnection.Open()    ' Assign the connection property.
        myCommand.Connection  = myConnection    ' Begin the transaction.
        myTrans = myConnection.BeginTransaction()    ' Assign transaction object for a pending local transaction
        myCommand.Transaction = myTrans    try
          ' Restore database to it's original condition so sample will work correctly.
          myCommand.CommandText = "DELETE FROM Region WHERE (RegionID = 100) OR (RegionID = 101)"
          myCommand.ExecuteNonQuery()      ' Insert the first record.
          myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'MidWestern')"
          myCommand.ExecuteNonQuery()      ' Insert the second record.
          myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'MidEastern')"
          myCommand.ExecuteNonQuery()      myTrans.Commit()
          Console.Write("两个记录都已写入数据库!")
        catch e as Exception
          myTrans.Rollback()
          Console.WriteLine(e.ToString())
          Console.Write("两个记录都未写入数据库!")
        finally
          myConnection.Close()
        end try
      end sub
    end classend namespace
      

  3.   

    请问为什么要使用事务?这个不需要事务不是也可以吗,如果捕捉到error也不会更新成功。麻烦说一下相对于不使用事务的优点?
      

  4.   

    to mmkk:
    使用事务和不使用事务是相对于代码而言的,实际上再不使用transaction的场合,你或许已经自己实现了类似的事务处理,比如说级联表的操作,就像版主的问题,你可能采用其它的方式来处理一旦岗位责任表的操作出错(例如在多用户并发操作的情景中产生冲突),让前面的职工表操作无效。事实上你已经在使用事务的概念了,如果表之间的操作非常复杂,你为什么不把事务的处理交给系统取做呢?记得前不久,在微软的一个chat上,我向MS的专家请教了ADO.NET的事务和数据库中自身的事务处理问题,得到的回答是:二者的处理过程是一致的,也就是说同样采用的都是系统中的事务处理机制,没有什么不同。
      

  5.   

    Thanks to niwalker!有点明白,事实上,我只有在存储过程中使用transaction的概念...
      

  6.   

    不知道大家有没有遇到过事务回滚的时候找不到BEGINTRANS的情况?