我在项目中写入数据库的时候,需要向多个数据表中同时写入相关数据,
问题是,我担心,第一个语句可以执行,第二个发生错误了,不执行报错了。
数据库中的数据就会出现不符合的情况,因为这些数据都是有关联的。如何使得这些SQL语句,要么一起成功执行,要么一个都不执行,直接报错。请高手给点意见。

解决方案 »

  1.   

    这个叫事务
    SqlTransaction tran = conn.BeginTransaction();
    SqlCommand cmd = new SqlCommand();
       cmd.Connection = conn;
       cmd.Transaction = tran;
       try
       { ... }
       catch
       {
         tran.Rollback();//回滚
       }
      

  2.   

    /// <summary>
      /// 执行多条SQL语句,实现数据库事务。
      /// </summary>
      /// <param name="SQLStringList">多条SQL语句</param>  
      public static void ExecuteSqlTran(ArrayList SQLStringList)
      {
       using (SqlConnection conn = new SqlConnection(connectionString))
       {
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection=conn;    
        SqlTransaction tx=conn.BeginTransaction();   
        cmd.Transaction=tx;    
        try
        {     
         for(int n=0;n<SQLStringList.Count;n++)
         {
          string strsql=SQLStringList[n].ToString();
          if (strsql.Trim().Length>1)
          {
           cmd.CommandText=strsql;
           cmd.ExecuteNonQuery();
          }
         }          
         tx.Commit();     
        }
        catch(System.Data.SqlClient.SqlException E)
        {  
         tx.Rollback();
         throw new Exception(E.Message);
        }
       }
      }
      

  3.   

    使用事务 SqlTranscationmsdn: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx