zoukankan      html  css  js  c++  java
  • c#执行sql事物

    Helper
    using System;
    using System.Collections.Specialized;
    using System.Configuration;
    using System.Data;
    using System.Data.Common;
    using System.Data.SqlClient;
    using Microsoft.Practices.EnterpriseLibrary.Data;
    using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
    
    /* 
     * 作 者: zjf
     * 创建时间: 2013-1-29 10:20:53 
     * 说明:  
     */
    
    namespace Baitour.Utility
    {
        /// <summary>
        /// 数据库访问类
        /// </summary>
        public sealed class DBHelper
        {
            public static int ConnIndex = 0;
            public static DBHelper CreateMapping(string connStr = "")
            {
                DBHelper db = new DBHelper(connStr);
                return db;
            }
    
            /// <summary>
            /// 增删改的数据库连接字符串
            /// </summary>
            string conString = "";
            /// <summary>
            /// 查询的数据库连接字符串
            /// </summary>
            string queryConString = "";
    
            DBHelper(string connStr = "")
            {
                if (string.IsNullOrWhiteSpace(connStr))
                {
                    conString = ConfigurationManager.ConnectionStrings["DBConfig"].ToString();
    
                    //第一个链接字符串是ConfigurationManager.ConnectionStrings[0].Name LocalSqlServer不知道是谁,所以要从第二个取
                    //如果连接字符串的数量和当前索引+1相同 则从第一个索引开始取
                    NameValueCollection connStrs = new NameValueCollection();
                    int j = 0;
                    for (int i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++)
                    {
                        if (ConfigurationManager.ConnectionStrings[i].Name.StartsWith("QueryDB"))
                        {
                            connStrs.Add(j.ToString(), ConfigurationManager.ConnectionStrings[i].ToString());
                            j++;
                        }
                    }
    
                    if (connStrs.Count > 0)
                    {
                        if (connStrs.Count == ConnIndex)
                        {
                            ConnIndex = 0;
                        }
                        queryConString = connStrs[ConnIndex].ToString();
                        ConnIndex++;
                    }
                    else
                    {
                        queryConString = conString;
                    }
    
                }
                else
                {
                    conString = connStr;
                    queryConString = connStr;
                }
    
                DBMapping = new SqlDatabase(conString);
                QueryDBMapping = new SqlDatabase(queryConString);
    
            }
    
            #region 变量or属性
    
            /// <summary>
            /// 增删改的企业库访问映射对象
            /// </summary>
            internal Database DBMapping { get; set; }
    
            /// <summary>
            /// 查询的企业库访问映射对象
            /// </summary>
            internal Database QueryDBMapping { get; set; }
    
            /// <summary>
            /// 增删改的数据库连接
            /// </summary>
            internal DbConnection DBConnMapping { get; set; }
    
            /// <summary>
            /// 查询的数据库连接
            /// </summary>
            internal DbConnection QueryDBConnMapping { get; set; }
    
            /// <summary>
            /// 数据库事务
            /// </summary>
            internal DbTransaction DBTranMapping { get; set; }
    
            #endregion
    
            #region 方法
    
            #region 准备方法
    
            /// <summary>
            /// 创建数据库连接
            /// </summary>
            void CreateDB()
            {
                DBMapping = new SqlDatabase(conString);
                QueryDBMapping = new SqlDatabase(queryConString);
            }
    
            /// <summary>
            /// 创建并打开连接
            /// </summary>
            void CreateConn()
            {
                #region 增删改
    
                if (DBMapping == null)
                {
                    CreateDB();
                }
    
                if (DBConnMapping == null)
                {
                    DBConnMapping = DBMapping.CreateConnection();
                    DBConnMapping.Open();//打开连接
                }
    
                //打开存在的连接
                if (DBConnMapping != null && DBConnMapping.State != ConnectionState.Open)
                {
                    DBConnMapping.Open();//打开连接
                }
    
                #endregion
    
                #region 查询
    
                if (QueryDBMapping == null)
                {
                    CreateDB();
                }
    
                if (QueryDBConnMapping == null)
                {
                    QueryDBConnMapping = QueryDBMapping.CreateConnection();
                    QueryDBConnMapping.Open();//打开连接
                }
    
                //打开存在的连接
                if (QueryDBConnMapping != null && QueryDBConnMapping.State != ConnectionState.Open)
                {
                    QueryDBConnMapping.Open();//打开连接
                }
    
                #endregion
            }
    
            /// <summary>
            /// 关闭数据库连接
            /// </summary>
            public void CloseConn()
            {
                if (DBConnMapping != null && DBConnMapping.State == ConnectionState.Open)
                {
                    DBConnMapping.Close();
                    DBConnMapping.Dispose();
                }
    
                if (QueryDBConnMapping != null && QueryDBConnMapping.State == ConnectionState.Open)
                {
                    QueryDBConnMapping.Close();
                    QueryDBConnMapping.Dispose();
                }
            }
    
            /// <summary>
            /// 创建并返回事务
            /// </summary>
            public DbTransaction CreateTran()
            {
                if (DBMapping == null) { CreateDB(); }
                CreateConn();
                DBTranMapping = DBTranMapping ?? DBConnMapping.BeginTransaction();
                return DBTranMapping;
            }
    
            /// <summary>
            /// 创建命令对象
            /// </summary>
            /// <param name="commandType">sql语句/存储过程</param>
            /// <param name="commandText">名称</param>
            /// <param name="commParameters">sql参数</param>
            /// <param name="isQuery">是否是创建查询命令</param>
            /// <returns></returns>
            DbCommand CreateComm(CommandType commandType, string commandText, DbParameter[] commParameters = null, bool isQuery = false)
            {
                DbCommand command = null;
                if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("sql语句/存储过程为空");
                //创建命令对象
                if (commandType == CommandType.StoredProcedure)
                    command = isQuery ? QueryDBMapping.GetStoredProcCommand(commandText) : DBMapping.GetStoredProcCommand(commandText);
                else
                    command = isQuery ? QueryDBMapping.GetSqlStringCommand(commandText) : DBMapping.GetSqlStringCommand(commandText);
    
                //清空参数
                command.Parameters.Clear();
                //填充参数
                if (commParameters != null)
                {
                    if (!string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["DBType"]) && ConfigurationManager.AppSettings["DBType"].ToLower() == "oracle")
                    {
                        foreach (DbParameter item in commParameters)
                        {
                            if (!item.ParameterName.StartsWith("!"))
                                item.ParameterName = "!" + item.ParameterName;
                        }
                    }
                    else
                    {
                        foreach (DbParameter item in commParameters)
                        {
                            if (!item.ParameterName.StartsWith("@"))
                                item.ParameterName = "@" + item.ParameterName;
                        }
                    }
                    if (commParameters.Length == 1) { command.Parameters.Add(commParameters[0]); }
                    else { command.Parameters.AddRange(commParameters); }
                }
    
                return command;
            }
    
            #endregion
    
            #region 执行方法
    
            #region sql、存储过程
    
            /// <summary>
            /// 返回首列
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="paras"></param>
            /// <returns></returns>
            public object ExecuteScalar(string sql, DbParameter[] paras, CommandType cType = CommandType.Text)
            {
                object obj = null;
                try
                {
                    DbCommand command = CreateComm(cType, sql, paras, true);
                    obj = DBMapping.ExecuteScalar(command);
                }
                catch (Exception ex)
                {
                }
                finally
                {
                    CloseConn();
                }
                return obj;
            }
    
            /// <summary>
            /// 返回首列
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="paras"></param>
            /// <returns></returns>
            public object ExecuteScalar(string sql, DbParameter[] paras, DbTransaction tran, CommandType cType = CommandType.Text)
            {
                object obj = null;
                try
                {
                    DbCommand command = CreateComm(cType, sql, paras);
                    obj = DBMapping.ExecuteScalar(command, tran);
                }
                catch (Exception ex)
                {
    
                }
                finally
                {
    
                }
                return obj;
            }
    
            /// <summary>
            /// 返回reader
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="paras"></param>
            /// <returns></returns>
            public IDataReader ExecuteReader(string sql, DbParameter[] paras, CommandType cType = CommandType.Text)
            {
                try
                {
                    DbCommand command = CreateComm(cType, sql, paras, true);
                    command.Connection = QueryDBMapping.CreateConnection();
                    command.Connection.Open();
                    return command.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 返回数据集
            /// </summary>
            /// <returns></returns>
            public DataSet ExecuteDataSet(string sql, DbParameter[] paras, CommandType cType = CommandType.Text)
            {
                try
                {
                    DbCommand command = CreateComm(cType, sql, paras, true);
                    return QueryDBMapping.ExecuteDataSet(command);
                }
                catch (Exception ex)
                {
                    return null;
                }
                finally
                {
                    CloseConn();
                }
            }
    
            /// <summary>
            /// 得到影响行数
            /// </summary>
            /// <returns></returns>
            public int ExecuteNonQuery(string sql, DbParameter[] paras, CommandType cType = CommandType.Text)
            {
                try
                {
                    DbCommand command = CreateComm(cType, sql, paras);
                    return DBMapping.ExecuteNonQuery(command);
                }
                catch (Exception ex)
                {
                    return -1;
                }
                finally
                {
                    CloseConn();
                }
            }
    
            /// <summary>
            /// 得到影响行数需要手动关闭连接
            /// </summary>
            /// <returns></returns>
            public int ExecuteNonQuery(string sql, DbParameter[] paras, DbTransaction tran, CommandType cType = CommandType.Text)
            {
                try
                {
                    DbCommand command = CreateComm(cType, sql, paras);
                    return DBMapping.ExecuteNonQuery(command, tran);
                }
                catch (Exception ex)
                {
                    return -1;
                }
                finally
                {
                }
            }
    
            /// <summary>
            /// 数据库分页获取DataSet对象
            /// </summary>
            /// <param name="sTable_Name">表名/视图名</param>
            /// <param name="sSign_Record">显示的字段(以,分隔)/*表示全部字段</param>
            /// <param name="sFilter_Condition">查询条件</param>
            /// <param name="iPage_Size">每页显示条数</param>
            /// <param name="iPage_Index">第几页</param>
            /// <param name="sTaxisField">排序字段(以,分隔)</param>
            /// <param name="iTaxis_Sign">排序0升序1降序</param>
            /// <param name="iPageCount">返回总页数</param>
            /// <param name="iiRecord_Count">返回总记录数</param>
            /// <returns>DataSet对象</returns>
            public DataSet ExecutePageDataSet(string sTable_Name, string sSign_Record,
                string sFilter_Condition, int iPage_Size, int iPage_Index, string sTaxisField,
                int iTaxis_Sign, out int iPageCount, out int iiRecord_Count)
            {
                DataSet ds = new DataSet();
                try
                {
                    SqlParameter[] param = new SqlParameter[]
                         {
                              new SqlParameter("@TableName",sTable_Name),
                              new SqlParameter("@Fields",sSign_Record),
                              new SqlParameter("@OrderField",sTaxisField),
                              new SqlParameter("@Taxis_Sign",iTaxis_Sign), 
                              new SqlParameter("@sqlWhere",sFilter_Condition),
                              new SqlParameter("@pageSize",iPage_Size),
                              new SqlParameter("@pageIndex",iPage_Index),
                              new SqlParameter("@TotalPage", System.Data.SqlDbType.Int),
                              new SqlParameter("@totalCount", System.Data.SqlDbType.Int)
                         };
                    param[7].Direction = System.Data.ParameterDirection.Output;
                    param[8].Direction = System.Data.ParameterDirection.Output;
                    //执行
                    DbCommand command = CreateComm(CommandType.StoredProcedure, "up_ProcCustomPage2005", param);
                    ds = QueryDBMapping.ExecuteDataSet(command);
                    iPageCount = 0;
                    iiRecord_Count = 0;
                    try
                    {
                        iPageCount = Convert.ToInt32(command.Parameters["@TotalPage"].Value);
                        iiRecord_Count = Convert.ToInt32(command.Parameters["@totalCount"].Value);
                    }
                    catch (Exception ex)
                    {
    
                        iPageCount = 0;
                        iiRecord_Count = 0;
                    }
                    finally
                    {
                        command.Parameters.Clear();
                    }
                }
                catch (Exception ex)
                {
                    ds = null;
                    iPageCount = 0;
                    iiRecord_Count = 0;
                }
                finally
                {
    
                }
                return ds;
            }
    
            #endregion
    
            #region 不加上查询参数的
    
            /// <summary>
            /// 返回首列
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="paras"></param>
            /// <returns></returns>
            public object ExecuteScalar(string sql)
            {
                object obj = null;
                try
                {
                    DbCommand command = CreateComm(CommandType.Text, sql, null, true);
                    return DBMapping.ExecuteScalar(command);
                }
                catch (Exception ex)
                {
    
                }
                finally
                {
                    CloseConn();
                }
                return obj;
            }
    
            /// <summary>
            /// 返回reader
            /// </summary>
            /// <returns></returns>
            public IDataReader ExecuteReader(string sql)
            {
                try
                {
    
                    DbCommand command = CreateComm(CommandType.Text, sql, null, true);
                    return QueryDBMapping.ExecuteReader(command);
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 得到影响行数
            /// </summary>
            /// <returns></returns>
            public int ExecuteNonQuery(string sql)
            {
                try
                {
                    DbCommand command = CreateComm(CommandType.Text, sql, null, true);
                    return DBMapping.ExecuteNonQuery(command);
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
    
            #endregion
    
            #endregion
    
            #endregion
    
        }
    
    }
     SqlParameter[] paras = new SqlParameter[] { };
                    paras = list.ToArray();
    
                    Baitour.Utility.DBHelper db = Baitour.Utility.DBHelper.CreateMapping();
                    DbTransaction dbTran = db.CreateTran();
                    try
                    {
                        //在这里将插入得到的子订单号返回
                        object obj = db.ExecuteScalar(sql.ToString(), paras, dbTran);
                        fsId = obj.ToString();
                        //int index = db.ExecuteNonQuery(sql.ToString(), paras, dbTran);
                        if (!string.IsNullOrWhiteSpace(fsId))
                        {
                            dbTran.Commit();
                            flag = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        flag = false;
                        dbTran.Rollback();
                        //throw;
                    }
                    finally
                    {
                        db.CloseConn();
                    }
  • 相关阅读:
    使用cygwin中的awk工具进行mysql binlog日志查看[利刃篇]
    设置win版vim启动项[利刃篇]
    php cli模式和浏览器访问下加载php.ini文件的注意事项[架构篇]
    sublime text 3中安装ctags支持函数跳转,安装convertToUtf8支持中文步骤[工具篇]
    在notepad++中使用正则匹配功能(一-龥!-~) 中文[利刃篇]
    微软职位内部推荐-SENIOR SOFTWARE ENGINEER
    微软职位内部推荐-Senior SDE
    微软职位内部推荐-SDEII
    微软职位内部推荐-SOFTWARE ENGINEER II
    微软职位内部推荐-SENIOR SOFTWARE ENGINEER
  • 原文地址:https://www.cnblogs.com/honghong75042/p/3049469.html
Copyright © 2011-2022 走看看