【ADO.NET】.NET事务应用-代码分享

来源:互联网 发布:485shopex页面优化 编辑:程序博客网 时间:2024/05/21 05:56

.NET代码

SQLBulk应用

public static void InsertEntities(string connectionString, string TableName, DataTable dt)        {            using (SqlConnection conn = new SqlConnection(connectionString))            {                conn.Open();                //增加事务                SqlTransaction trans = conn.BeginTransaction();                    using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))                    {                        try                        {                            sqlbulkcopy.DestinationTableName = TableName;                            for (int i = 0; i < dt.Columns.Count; i++)                            {                                sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);                            }                            sqlbulkcopy.WriteToServer(dt);                            trans.Commit();                            conn.Close();                        }                        catch (System.Exception ex)                        {                            trans.Rollback();                            conn.Close();                            throw ex;                        }                    }            }        }

SQL通用

/// <summary>/// 执行多条SQL语句,实现数据库事务。/// </summary>/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>public static void ExecuteSqlTran(Hashtable SQLStringList)        {            using (SqlConnection conn = new SqlConnection(connectionString))            {                conn.Open();                using (SqlTransaction trans = conn.BeginTransaction())                {                    SqlCommand cmd = new SqlCommand();                    try                    {                        //循环                        foreach (DictionaryEntry myDE in SQLStringList)                        {                            string cmdText = myDE.Key.ToString();                            SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);                            int val = cmd.ExecuteNonQuery();                            cmd.Parameters.Clear();                        }                        trans.Commit();                    }                    catch                    {                        trans.Rollback();                        throw;                    }                }            }        }
/// <summary>/// 执行多条SQL语句,实现数据库事务。/// </summary>/// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>        public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)        {            using (SqlConnection conn = new SqlConnection(connectionString))            {                conn.Open();                using (SqlTransaction trans = conn.BeginTransaction())                {                    SqlCommand cmd = new SqlCommand();                    try                    {                        int indentity = 0;                        //循环                        foreach (DictionaryEntry myDE in SQLStringList)                        {                            string cmdText = myDE.Key.ToString();                            SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;                            foreach (SqlParameter q in cmdParms)                            {                                if (q.Direction == ParameterDirection.InputOutput)                                {                                    q.Value = indentity;                                }                            }                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);                            int val = cmd.ExecuteNonQuery();                            foreach (SqlParameter q in cmdParms)                            {                                if (q.Direction == ParameterDirection.Output)                                {                                    indentity = Convert.ToInt32(q.Value);                                }                            }                            cmd.Parameters.Clear();                        }                        trans.Commit();                    }                    catch                    {                        trans.Rollback();                        throw;                    }                }            }        }