谁能给我说下“事务”即SqlTransaction怎么用,资料和例子,
什么时候用,,,为什么用,,,什么情况下用,,,用了又什么好处

解决方案 »

  1.   

    http://blog.csdn.net/tjvictor/archive/2009/04/14/4074240.aspx
      

  2.   

    SqlTransaction 类
    表示要在 SQL Server 数据库中处理的 Transact-SQL 事务。无法继承此类。 命名空间:System.Data.SqlClient
    程序集:System.Data(在 system.data.dll 中)备注
    --------------------------------------------------------------------------------应用程序通过在 SqlConnection 对象上调用 BeginTransaction 来创建 SqlTransaction 对象。对 SqlTransaction 对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。注意 
    在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。
     有关 SQL Server 事务的更多信息,请参见 SQL Server 2005 Books Online(《SQL Server 2005 联机丛书》)中的“Explicit Transactions”(显式事务)和“Coding Efficient Transactions”(对有效事务进行编码)。
    示例
    --------------------------------------------------------------------------------下面的示例创建一个 SqlConnection 和一个 SqlTransaction。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。出现任何错误时事务都会回滚。Try/Catch 错误处理用于处理尝试提交或回滚事务时的所有错误。
    private static void ExecuteSqlTransaction(string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();        SqlCommand command = connection.CreateCommand();
            SqlTransaction transaction;        // Start a local transaction.
            transaction = connection.BeginTransaction("SampleTransaction");        // Must assign both transaction object and connection
            // to Command object for a pending local transaction
            command.Connection = connection;
            command.Transaction = transaction;        try
            {
                command.CommandText =
                    "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
                command.ExecuteNonQuery();
                command.CommandText =
                    "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
                command.ExecuteNonQuery();            // Attempt to commit the transaction.
                transaction.Commit();
                Console.WriteLine("Both records are written to database.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
                Console.WriteLine("  Message: {0}", ex.Message);            // Attempt to roll back the transaction.
                try
                {
                    transaction.Rollback();
                }
                catch (Exception ex2)
                {
                    // This catch block will handle any errors that may have occurred
                    // on the server that would cause the rollback to fail, such as
                    // a closed connection.
                    Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                    Console.WriteLine("  Message: {0}", ex2.Message);
                }
            }
        }
    }
    继承层次结构
    --------------------------------------------------------------------------------System.Object
       System.MarshalByRefObject
         System.Data.Common.DbTransaction
          System.Data.SqlClient.SqlTransaction线程安全
    --------------------------------------------------------------------------------此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
    平台
    --------------------------------------------------------------------------------Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。版本信息
    --------------------------------------------------------------------------------.NET Framework
    受以下版本支持:2.0、1.1、1.0.NET Compact Framework
    受以下版本支持:2.0、1.0http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqltransaction(VS.80).aspx
      

  3.   

    事务是一组组合成逻辑工作单元的操作
    看msdn
    using(SqlConnection con = new SqlConnection(""))  
     {   
      con.Open();  
      SqlTransaction myTran = con.BeginTransaction();  
      SqlCommand myCom = new SqlCommand();  
      myCom.Connection = con;  
      myCom.Transaction = myTran;  
      try  
      {  
      myCom.CommandText = "insert into A values ('测试','111')";  
      myCom.ExecuteNonQuery();  
      myTran.Commit();  
      Response.Write("成功执行");  
      }  
      catch (Exception Ex)  
      {  
      myTran.Rollback();  
      Response.Write(Ex.ToString());  
      Response.Write("写入数据库失败");  
      }  
      finally  
      {  
      con.Close();  
      }  
    }
    using (TransactionScope transScope = new TransactionScope()) 
    {}
    .NET开发中的事务处理
      

  4.   

    就是防止数据提交时冲突,
    错误的sql语句执行时不让提交
      

  5.   

    SqlTransaction trans = sqlConnection2.BeginTransaction();//定义一个事务对象
                                SqlCommand command = new SqlCommand();
                                command.Connection = sqlConnection2;
                                command.Transaction = trans;
                                try
                                {                                //更新图书表的 图书状态  为是 SH为学号                                command.CommandText = "UPDATE tbl_SM SET ZD = '是'WHERE (SH ='" + txt_sh.Text + "')";                                command.ExecuteNonQuery();                                //向借书表中插入一条借书记录
                                    command.CommandText = "INSERT INTO tbl_JYQK VALUES('" + txt_bh.Text.Trim() + "','" + txt_sh.Text.Trim() + "','" + DateTime.Now + "')";
                                    command.ExecuteNonQuery();
                                    
                                    trans.Commit();//正常提交事务
                                    MessageBox.Show("借阅成功!");
                                }
                                catch
                                {
                                    MessageBox.Show("借阅失败!");
                                    trans.Rollback();//发生异常回滚事务
                                }
                                finally 
                                {
                                    sqlConnection2.Close();
                                }
      

  6.   

    楼上解释的很到位!
    代码:
    /// <summary>
            /// 执行查询语句,返回DataSet,事务的隔离级别为读未提交
            /// </summary>
            /// <param name="SQLString">存储过程名称</param>
            /// <param name="cmdParms">MySqlParameter[]存储过程参数</param>
            /// <returns>DataSet</returns>
            public static DataSet QueryAndReadUncommitted(string procedureName, params MySqlParameter[] cmdParms)
            {
                using (MySqlConnection connection = new MySqlConnection(ConnectionString))
                {
                    connection.Open();
                    using (MySqlTransaction trans = connection.BeginTransaction(IsolationLevel.ReadUncommitted))--设置事务的隔离级别
                    {
                        MySqlCommand cmd = new MySqlCommand(procedureName, connection);
                        using (MySqlDataAdapter adapter = new MySqlDataAdapter(cmd))
                        {
                            DataSet ds = new DataSet();
                            try
                            {
                                cmd.CommandType = CommandType.StoredProcedure;
                                for (int i = 0; i < cmdParms.Length; i++)
                                    cmd.Parameters.Add(cmdParms[i]);
                                adapter.Fill(ds);
                                trans.Commit();
                            }
                            catch (MySql.Data.MySqlClient.MySqlException ex)
                            {
                                trans.Rollback();
                                throw new Exception(ex.Message);
                            }
                            finally
                            {
                                connection.Close();
                                cmd.Dispose();
                            }
                            return ds;
                        }
                    }
                }
            }
      

  7.   

    http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqltransaction(VS.80).aspx
      

  8.   

    事务简单说就是当你有多个操作时,这些操作必须都完成,一旦某一步不能完成就回滚,回到原来的状态。例子: public static bool ExecuteNonQuery(SqlConnection conn, ArrayList list)
            {
                string[] sqls = new string[list.Count];
                for (int i = 0; i < list.Count; i++)
                {
                    sqls[i] = list[i].ToString();
                }            using (SqlCommand cmd = conn.CreateCommand())
                {
                    using (SqlTransaction trans = conn.BeginTransaction())
                    {
                        cmd.Transaction = trans;
                        bool onError = false;
                        for (int i = 0; i < sqls.Length; i++)
                        {
                            cmd.CommandText = sqls[i];
                            try
                            {
                                int result = cmd.ExecuteNonQuery();
                                if (result <= 0)
                                {
                                    onError = true;
                                }
                            }
                            catch (Exception se)
                            {
                                onError = true;
                                Console.WriteLine(se.ToString());
                            }
                        }
                        if (onError)
                        {
                            trans.Rollback();
                            return false;
                        }
                        else
                        {
                            trans.Commit();
                            return true;
                        }
                    }            }
            }