天天看点

C#中事务批量操作sql语句

首先至少要引用的文件
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
(1)在需要执行sql业务中写如下代码:
  ArrayList sqlList = new ArrayList();
  string sqlStr1 = @"insert into....";
  string sqlStr2 = @"update....";
  sqlList.Add(sqlStr1 );
  sqlList.Add(sqlStr2 );
  if (sqlList.Count > 0)
 {
     var result= BatchExecuteNonQuery(sqlList); //事务操作
       if (result)
        {
            //操作成功的代码
         }
        else { 
            //操作失败的代码
        }
                       
  }

(2)执行BatchExecuteNonQuery函数的代码
public bool BatchExecuteNonQuery(ArrayList ALSql)
        {
            string strconntstring = WebConfigurationManager.ConnectionStrings["字符串"].ToString();
            SqlConnection Conn = new SqlConnection(strconntstring);
            if (Conn.State != ConnectionState.Open)
            {
                try
                {
                    Conn.Open();
                }
                catch
                {
                    throw new Exception("数据库无法连接");
                }
            }
            bool state= false;
            SqlTransaction transaction = null;
            if (Conn.State != ConnectionState.Open)
            {
                try
                {
                    Conn.Open();
                }
                catch
                {
                    throw new Exception("数据库无法连接");
                }
            }
            try
            {
                SqlCommand cmd = new SqlCommand();

                transaction = Conn.BeginTransaction();
                cmd.Transaction = transaction;
                cmd.Connection = Conn;
                cmd.CommandType = CommandType.Text;

                for (int i = 0; i < ALSql.Count; i++)
                {
                    cmd.CommandText = ALSql[i].ToString();
                    cmd.ExecuteNonQuery();
                }
                transaction.Commit();
                state= true;
            }
            catch (Exception ex)
            {
                state= false;
                transaction.Rollback();
            }
            finally
            {
                Conn.Close();
            }
            return state;
        }