• MyBatisNet数据操作类


    1

    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Data;
    using System.Linq;
    using MT.Framework.DataOperation;
    using MT.Framework.DataOperation.Sequences;
    using MT.Framework.Logs;
    using MyBatis.DataMapper;
    using MyBatis.DataMapper.Exceptions;
    using MyBatis.DataMapper.Session;
    using MyBatis.DataMapper.Session.Transaction;
    
    namespace MT.Frame.DAL.DataAccessLayer
    {
        /// <summary>
        /// MyBatisNet数据操作类
        /// </summary>
        public class DatabaseMyBatis : IDatabaseMyBatis, IDisposable
        {
    
            private string _errorInfo;
            /// <summary>
            /// 错误提示
            /// </summary>
            public string ErrorInfo
            {
                get { return _errorInfo; }
                set { _errorInfo = value; }
            }
            private DatabaseMybatisBuilder _dataBase;
            private IDataMapper _dataMapper;
            /// <summary>
            /// SqlMapper对象
            /// </summary>
            protected IDataMapper DataMapper
            {
                get { return _dataMapper; }
                set
                {
                    _dataMapper = value;
                    _sessionFactory = ((IModelStoreAccessor)_dataMapper).ModelStore.SessionFactory;
                }
            }
            /// <summary>
            /// Session
            /// </summary>
            private ISession _session;
            /// <summary>
            /// _transaction
            /// </summary>
            private ITransaction _transaction;
            /// <summary>
            /// 
            /// </summary>
            private ISessionFactory _sessionFactory;
    
            private string _connectionString;
            /// <summary>
            /// 数据库连接字符串
            /// </summary>
            public string ConnectionString
            {
                get { return _connectionString; }
                set { _connectionString = value; }
            }
            /// <summary>
            /// 序号生成器
            /// </summary>
            public ISequences Sequences { get; private set; }
    
            #region 构造函数
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="connectionString"></param>
            public DatabaseMyBatis(string connectionString)
            {
                ConnectionString = connectionString;
                _dataBase = new DatabaseMybatisBuilder();
                DataMapper = _dataBase.GetMapper();
                //_sessionFactory = _dataBase.SessionFactory;
                _sessionFactory.DataSource.ConnectionString = connectionString;
                Sequences = new Sequence(ConnectionString);
                // SqlMapperForSequence = _dataBase.GetMapper("SqlMapSequence.config");
    
    
            }
            /// <summary>
            /// 
            /// </summary>
            public DatabaseMyBatis()
            {
                _dataBase = new DatabaseMybatisBuilder();
                DataMapper = _dataBase.GetMapper();
                //  _sessionFactory = _dataBase.SessionFactory;
                // SqlMapperForSequence = _dataBase.GetMapper("SqlMapSequence.config");
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="connectionString"></param>
            /// <param name="sqlMapFileName"></param>
            public DatabaseMyBatis(string connectionString, string sqlMapFileName)
            {
                // _application = application;
                _dataBase = new DatabaseMybatisBuilder();
                DataMapper = _dataBase.GetMapper2(sqlMapFileName);
                ConnectionString = connectionString;
                // _sessionFactory = _dataBase.SessionFactory;
                _sessionFactory.DataSource.ConnectionString = connectionString;
                //Sequences = new Sequence(ConnectionString);
    
            }
    
    
            //public DatabaseMyBatis( IDataMapper idataMapper)
            //{
            //   // this._application = application;
            //    _dataBase = new DatabaseMybatisBuilder();
            //    _dataMapper = idataMapper;
    
            //}
    
            #endregion
    
            /// <summary>
            /// 连接到数据,并作相应的初始化
            /// </summary>
            /// <returns></returns>
            public Boolean ConnectAccessDb()
            {
                try
                {
                    ISession session = _sessionFactory.OpenSession();
                    if (session == null)
                    {
                        return false;
                    }
                    session.OpenConnection();
                    session.Close();
                    return true;
                }
                catch (DataMapperException e)
                {
                    ErrorInfo = @"打开数据库出错:
    " + e.InnerException.Message;
                    return false;
                }
                catch (Exception ex)
                {
                    ErrorInfo = string.Format("初始化DataMapper对象出错:
    {0}", ex.Message);
                    return false;
                }
    
            }
            /// <summary>
            /// 连接到数据库,并作相应的初始化
            /// </summary>
            /// <returns></returns>
            public Boolean ConnectDb()
            {
                try
                {
                    if (_dataBase == null)
                    {
                        _dataBase = new DatabaseMybatisBuilder();
                    }
                    if (DataMapper == null)
                    {
                        DataMapper = _dataBase.GetMapper();
                    }
                    //if (SqlMapperForSequence == null)
                    //{
                    //    SqlMapperForSequence = _dataBase.GetMapper("SqlMapSequence.config");
                    //}
                    //  _seq = new SeqNumber(SqlMapperForSequence);
    
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        if (session == null)
                        {
                            return false;
                        }
                        using (var con = session.OpenConnection())
                        {
                            con.Close();
                            con.Dispose();
                        }
    
                        session.Close();
                        session.Dispose();
                    }
                    return true;
                }
                catch (DataMapperException e)
                {
                    ErrorInfo = string.Format("打开数据库出错:
    {0}", e.InnerException.Message);
                    return false;
                }
                catch (Exception ex)
                {
                    ErrorInfo = @"初始化DataMapper对象出错:
    " + ex.Message;
                    return false;
                }
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            public IDataMapper GetMapper()
            {
                return _dataMapper;
            }
    
            #region 数据操作方法
            #region 事物控制方法
            /// <summary>
            /// 开始一个会话
            /// </summary>
            private void BeginSession()
            {
                if (_session != null)
                {
                    CloseSession();
                }
                _session = _sessionFactory.OpenSession();
            }
            /// <summary>
            /// 关闭一个会话
            /// </summary>
            private void CloseSession()
            {
                if (_session != null)
                {
                    if (_session.Connection != null)
                    {
                        _session.Connection.Close();
                        _session.Connection.Dispose();
                    }
                    _session.Close();
                    _session.Dispose();
                    _session = null;
                }
            }
            /// <summary>
            /// 开启一个事物
            /// </summary>
            public void BeginTransaction()
            {
                IsAutoCommit = false;
                BeginSession();
                _transaction = _session.BeginTransaction();
    
            }
            /// <summary>
            /// 提交一个事物
            /// </summary>
            public void CommitTransaction()
            {
                _transaction.Commit();
                CloseSession();
                IsAutoCommit = true;
    
            }
            /// <summary>
            /// 回滚一个事件
            /// </summary>
            public void RollBackTransaction()
            {
                _transaction.Rollback();
                CloseSession();
                IsAutoCommit = true;
    
            }
            #endregion
            #endregion
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public IList QueryForIList(string statementName, object parameterObject)
            {
                using (var session = _sessionFactory.OpenSession())
                {
                    using (var con = session.OpenConnection())
                    {
                        try
                        {
                            var list = _dataMapper.QueryForList(statementName, parameterObject);
                            con.Close();
                            con.Dispose();
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            return list;
                        }
                        catch (Exception ex)
                        {
                            session.Close();
                            session.Dispose();
                            ErrorInfo = ex.Message;
                            throw new Exception(ex.Message, ex);
                        }
                        finally
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                        }
                    }
                }
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public IList<T> QueryForList<T>(string statementName, object parameterObject)
            {
                using (var session = _sessionFactory.OpenSession())
                {
                    using (var con = session.OpenConnection())
                    {
                        try
                        {
                            var list = _dataMapper.QueryForList<T>(statementName, parameterObject);
                            con.Close();
                            con.Dispose();
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            return list;
    
                        }
                        catch (Exception ex)
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            ErrorInfo = ex.Message;
                            throw new Exception(ex.Message, ex);
                        }
                        finally
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                        }
                    }
                }
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public IList QueryForList(string statementName, object parameterObject)
            {
                using (var session = _sessionFactory.OpenSession())
                {
                    using (var con = session.OpenConnection())
                    {
                        try
                        {
                            var list = _dataMapper.QueryForList(statementName, parameterObject);
                            con.Close();
                            con.Dispose();
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            return list;
    
                        }
                        catch (Exception ex)
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            ErrorInfo = ex.Message;
                            throw new Exception(ex.Message, ex);
                        }
                        finally
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                        }
                    }
                }
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public object QueryForObject(string statementName, object parameterObject)
            {
                using (var session = _sessionFactory.OpenSession())
                {
                    using (var con = session.OpenConnection())
                    {
                        try
                        {
                            var obj = _dataMapper.QueryForObject(statementName, parameterObject);
                            con.Close();
                            con.Dispose();
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            return obj;
                        }
                        catch (Exception ex)
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            ErrorInfo = ex.Message;
                            throw new Exception(ex.Message, ex);
                        }
                        finally
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                        }
                    }
                }
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public T QueryForObject<T>(string statementName, object parameterObject)
            {
                using (var session = _sessionFactory.OpenSession())
                {
                    using (var con = session.OpenConnection())
                    {
                        try
                        {
                            var obj = _dataMapper.QueryForObject<T>(statementName, parameterObject);
                            con.Close();
                            con.Dispose();
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            return obj;
                        }
                        catch (Exception ex)
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                            ErrorInfo = ex.Message;
                            throw new Exception(ex.Message, ex);
                        }
                        finally
                        {
                            if (session.Connection != null)
                            {
                                session.Connection.Close();
                                session.Connection.Dispose();
                            }
                            session.Close();
                            session.Dispose();
                        }
                    }
                }
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public Boolean QueryForDataTable(out DataTable dt, string statementName, object parameterObject)
            {
                try
                {
                    dt = new DataTable();
                    IList list = QueryForList(statementName, parameterObject);
                    // object iDictionary = sqlMapper.QueryForObject(statementName, parameterObject);
                    if (list.Count <= 0)
                    {
    
                        return false;
                    }
                    //此处遍历IList的结构并建立同样的DataTable
                    System.Reflection.PropertyInfo[] p = list[0].GetType().GetProperties();
                    // var a = list[0] as ArrayList;
                    foreach (System.Reflection.PropertyInfo pi in p)
                    {
                        Type colType = pi.PropertyType;
    
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
    
                            colType = colType.GetGenericArguments()[0];
    
                        }
                        // ReSharper disable once AssignNullToNotNullAttribute
                        dt.Columns.Add(pi.Name, Type.GetType(colType.ToString()));
                    }
    
                    for (int i = 0; i < list.Count; i++)
                    {
                        // t1 = list[i];
                        IList tempList = new ArrayList();
                        //将IList中的一条记录写入ArrayList
                        foreach (var pi in p)
                        {
                            object oo = pi.GetValue(list[i], null);
                            tempList.Add(oo);
                        }
    
                        object[] itm = new object[p.Length];
                        //遍历ArrayList向object[]里放数据
                        for (int j = 0; j < tempList.Count; j++)
                        {
                            itm.SetValue(tempList[j], j);
                        }
                        //将object[]的内容放入DataTable
                        dt.LoadDataRow(itm, true);
                    }
                }
                catch (Exception ex)
                {
                    ErrorInfo = ex.Message;
                    throw new Exception(ex.Message, ex);
                }
                return true;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="dt"></param>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <returns></returns>
            public Boolean QueryForDataTable<T>(out DataTable dt, string statementName, object parameterObject)
            {
                dt = new DataTable();
                try
                {
                    // dt = new DataTable();
                    IList<T> list = QueryForList<T>(statementName, parameterObject);
                    T t1;
                    if (list.Count <= 0)
                    {
                        //dt = getDataTableForClass(typeof(T).ToString());
                        dt = GetDataTableForClass<T>();
                        return true;
                    }
                    //此处遍历IList的结构并建立同样的DataTable
                    System.Reflection.PropertyInfo[] p = list[0].GetType().GetProperties();
                    foreach (System.Reflection.PropertyInfo pi in p)
                    {
                        Type type = typeof(T);
                        if (pi.DeclaringType != type)
                        {
                            continue;
                        }
                        Type colType = pi.PropertyType;
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
    
                            colType = colType.GetGenericArguments()[0];
    
                        }
                        // ReSharper disable once AssignNullToNotNullAttribute
                        dt.Columns.Add(pi.Name, Type.GetType(colType.ToString()));
                    }
    
                    for (int i = 0; i < list.Count; i++)
                    {
    
                        t1 = list[i];
                        IList tempList = new ArrayList();
                        //int len = 0;
                        //将IList中的一条记录写入ArrayList
                        foreach (var pi in t1.GetType().GetProperties())
                        {
                            Type type1 = typeof(T);
                            if (pi.DeclaringType != type1)
                            {
                                continue;
                            }
                            object oo = pi.GetValue(t1, null);
                            tempList.Add(oo);
    
                        }
    
                        object[] itm = new object[tempList.Count];
                        //遍历ArrayList向object[]里放数据
                        for (int j = 0; j < tempList.Count; j++)
                        {
                            itm.SetValue(tempList[j], j);
                        }
                        //将object[]的内容放入DataTable
                        dt.LoadDataRow(itm, true);
                    }
                }
                catch (Exception ex)
                {
                    ErrorInfo = ex.Message;
                    dt = GetDataTableForClass<T>();
                    //System.Windows.Forms.MessageBox.Show("数据查询出错:" + ex.Message, "查询错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                    throw new Exception(ex.Message, ex);
                    //return false;
                }
                return true;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public DataTable GetDataTableForClass<T>()
            {
                var dt = new DataTable();
                try
                {
                    Type type = typeof(T);
                    DataColumn dcl;
    
                    foreach (var item in type.GetProperties())
                    {
    
                        Type type1 = typeof(T);
                        if (item.DeclaringType != type1)
                        {
                            continue;
                        }
                        Type colType = item.PropertyType;
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
    
                            colType = colType.GetGenericArguments()[0];
    
                        }
    
                        dcl = new DataColumn(item.Name, colType);
                        dt.Columns.Add(dcl);
    
                    }
                    dt.TableName = type.Name;
                }
                catch (Exception ex)
                {
                    ErrorInfo = ex.Message;
                    throw new Exception(ex.Message, ex);
                }
                return dt;
    
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="parameterClass"></param>
            /// <returns></returns>
            public DataTable GetDataTableForClass(string parameterClass)
            {
                var dt = new DataTable();
                try
                {
                    Type type = Type.GetType(parameterClass);
                    if (type == null)
                    {
    
                        throw new Exception("传入的类型【" + parameterClass + "】不存在!");
                    }
                    DataColumn dcl;
    
                    foreach (var item in type.GetProperties())
                    {
                        Type colType = item.PropertyType;
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
    
                            colType = colType.GetGenericArguments()[0];
    
                        }
                        dcl = new DataColumn(item.Name, colType);
                        dt.Columns.Add(dcl);
    
                    }
                    dt.TableName = type.Name;
                }
                catch (Exception ex)
                {
                    ErrorInfo = ex.Message;
                    throw new Exception(ex.Message, ex);
                }
                return dt;
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <param name="keyValue"></param>
            /// <param name="returnValue"></param>
            /// <returns></returns>
            public bool Insert<T>(string statementName, T parameterObject, ref Nullable<Int32> keyValue,
                out object returnValue)
            {
                object a;
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                a = _dataMapper.Insert(statementName, parameterObject);
                                keyValue = Convert.ToInt32(a);
                                returnValue = a;
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                            catch (Exception ex)
                            {
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                returnValue = null;
                                return false;
                            }
                            finally
                            {
                                transaction.Complete();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
                    }
                }
    
                else
                {
                    try
                    {
                        a = _dataMapper.Insert(statementName, parameterObject);
                        keyValue = Convert.ToInt32(a);
                        returnValue = a;
                        return true;
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message, ex);
                    }
    
                }
                return true;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <param name="returnValue"></param>
            /// <returns></returns>
            public bool Insert<T>(string statementName, T parameterObject, out object returnValue)
            {
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                returnValue = _dataMapper.Insert(statementName, parameterObject);
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                            catch (Exception ex)
                            {
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                returnValue = null;
                                return false;
                            }
                            finally
                            {
                                transaction.Complete();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    returnValue = _dataMapper.Insert(statementName, parameterObject);
                }
                return true;
    
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObjects"></param>
            /// <returns></returns>
            public bool Insert<T>(string statementName, IEnumerable<T> parameterObjects)
            {
    
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                foreach (object parameterObject in parameterObjects)
                                {
                                    _dataMapper.Insert(statementName, parameterObject);
                                }
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                            catch (Exception ex)
                            {
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                return false;
                            }
                            finally
                            {
                                transaction.Complete();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    foreach (object parameterObject in parameterObjects)
                    {
                        _dataMapper.Insert(statementName, parameterObject);
                    }
                }
                return true;
    
            }
    
            /// <summary>
            /// 更新单条数据
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <param name="returnValue"></param>
            /// <returns></returns>
            public bool Update<T>(string statementName, T parameterObject, out object returnValue)
            {
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                returnValue = _dataMapper.Update(statementName, parameterObject);
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                            catch (Exception ex)
                            {
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                returnValue = null;
                                return false;
                            }
                            finally
                            {
                                transaction.Complete();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    returnValue = _dataMapper.Update(statementName, parameterObject);
    
                }
                return true;
            }
            /// <summary>
            /// 更新一组数据
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObjects"></param>
            /// <returns></returns>
            public bool Update<T>(string statementName, IEnumerable<T> parameterObjects)
            {
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                foreach (object parameterObject in parameterObjects)
                                {
                                    _dataMapper.Update(statementName, parameterObject);
                                }
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                            catch (Exception ex)
                            {
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                return false;
                            }
                            finally
                            {
                                transaction.Complete();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    foreach (object parameterObject in parameterObjects)
                    {
                        _dataMapper.Update(statementName, parameterObject);
                    }
                }
    
                return true;
    
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObject"></param>
            /// <param name="returnValue"></param>
            /// <returns></returns>
            public bool Delete<T>(string statementName, T parameterObject, out object returnValue)
            {
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                returnValue = _dataMapper.Delete(statementName, parameterObject);
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                            catch (Exception ex)
                            {
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                returnValue = null;
                                return false;
                            }
                            finally
                            {
                                transaction.Complete();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
                    }
                }
                else
                {
                    returnValue = _dataMapper.Delete(statementName, parameterObject);
                }
                return true;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="statementName"></param>
            /// <param name="parameterObjects"></param>
            /// <returns></returns>
            public bool Delete<T>(string statementName, IEnumerable<T> parameterObjects)
            {
                if (IsAutoCommit)
                {
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                foreach (object parameterObject in parameterObjects)
                                {
                                    _dataMapper.Delete(statementName, parameterObject);
                                }
                                transaction.Commit();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                //return true;
                            }
                            catch (Exception ex)
                            {
                                transaction.Rollback();
                                ErrorInfo = ex.Message;
                                transaction.Rollback();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                return false;
                            }
                            finally
                            {
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                            }
                        }
    
                    }
                    //  CommitTransaction();
                }
                else
                {
                    foreach (object parameterObject in parameterObjects)
                    {
                        _dataMapper.Delete(statementName, parameterObject);
                    }
                }
                return true;
            }
    
            #region 实现对IList到DataSet的转换
            ///<summary>
            /// 实现对IList到DataSet的转换
            /// </summary>
            /// <param name="resList">待转换的IList</param>
            /// <returns>转换后的DataSet</returns>
            public DataSet ListToDataSet(IList resList)
            {
                var rds = new DataSet();
                //将DateTable放入DataSet
                rds.Tables.Add(ListToDataTable(resList));
                //返回DataSet
                return rds;
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="resList"></param>
            /// <returns></returns>
            public DataTable ListToDataTable(IList resList)
            {
                var tempDt = new DataTable();
    
                //此处遍历IList的结构并建立同样的DataTable
                System.Reflection.PropertyInfo[] p = resList[0].GetType().GetProperties();
                foreach (System.Reflection.PropertyInfo pi in p)
                {
                    Type colType = pi.PropertyType;
                    if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                    {
                        colType = colType.GetGenericArguments()[0];
                    }
                    // ReSharper disable once AssignNullToNotNullAttribute
                    tempDt.Columns.Add(pi.Name, Type.GetType(colType.ToString()));
                }
    
                for (int i = 0; i < resList.Count; i++)
                {
                    IList tempList = new ArrayList();
                    //将IList中的一条记录写入ArrayList
                    foreach (System.Reflection.PropertyInfo pi in p)
                    {
                        object oo = pi.GetValue(resList[i], null);
                        tempList.Add(oo);
                    }
    
                    object[] itm = new object[p.Length];
                    //遍历ArrayList向object[]里放数据
                    for (int j = 0; j < tempList.Count; j++)
                    {
                        itm.SetValue(tempList[j], j);
                    }
                    //将object[]的内容放入DataTable
                    tempDt.LoadDataRow(itm, true);
                }
    
                return tempDt;
            }
            #endregion
    
            private Boolean _autoCommit = true;
            /// <summary>
            /// 是否自动事物处理
            /// </summary>
            public bool IsAutoCommit
            {
                get
                {
                    return _autoCommit;
                }
                set
                {
                    _autoCommit = value;
                }
            }
            /// <summary>
            ///批量执行一组操作
            /// </summary>
            /// <param name="listParameter"></param>
            /// <returns></returns>
            public int ExecutionBatch(List<MyBatisNetParameter> listParameter)
            {
                if (listParameter == null || listParameter.Count == 0)
                {
                    return 1;
                }
                try
                {
                    listParameter.Sort(delegate(MyBatisNetParameter a, MyBatisNetParameter b)
                    {
                        return a.ExecSort.CompareTo(b.ExecSort);
                    }
                    );
    
                    IsAutoCommit = false;
                    bool succeed = true;
                    using (ISession session = _sessionFactory.OpenSession())
                    {
                        using (ITransaction transaction = session.BeginTransaction())
                        {
                            try
                            {
                                foreach (var item in listParameter)
                                {
                                    if (item.ParemeterObject == null)
                                    {
                                        continue;
                                    }
                                    if (item.StatementName == null || item.StatementName.Trim().Length <= 0)
                                    {
                                        continue;
                                    }
                                    switch (item.ExecDbtype)
                                    {
                                        case EnumExecDbType.Insert:
                                            succeed = item.ParemeterObject == null
                                                ? Insert(item.StatementName, item.ParemeterObject)
                                                : Insert(item.StatementName, item.ParemeterObject.ToArray());
                                            break;
                                        case EnumExecDbType.Update:
                                            succeed = item.ParemeterObject == null
                                                ? Update(item.StatementName, item.ParemeterObject)
                                                : Update(item.StatementName, item.ParemeterObject.ToArray());
                                            break;
                                        case EnumExecDbType.Delete:
                                            succeed = item.ParemeterObject == null
                                                ? Delete(item.StatementName, item.ParemeterObject)
                                                : Delete(item.StatementName, item.ParemeterObject.ToArray());
    
                                            break;
                                    }
                                    if (!succeed)
                                    {
                                        transaction.Rollback();
                                        transaction.Dispose();
                                        if (session.Connection != null)
                                        {
                                            session.Connection.Close();
                                            session.Connection.Dispose();
                                        }
                                        session.Close();
                                        session.Dispose();
                                        return -1;
                                    }
                                }
                                transaction.Commit();
                                transaction.Dispose();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                IsAutoCommit = true;
                                // return 1;
                            }
                            catch (Exception ex)
                            {
                                transaction.Rollback();
                                ErrorInfo = ex.Message;
                                transaction.Dispose();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                return -1;
                            }
                            finally
                            {
                                transaction.Complete();
                                transaction.Dispose();
                                if (session.Connection != null)
                                {
                                    session.Connection.Close();
                                    session.Connection.Dispose();
                                }
                                session.Close();
                                session.Dispose();
                                IsAutoCommit = true;
                            }
                        }
    
                    }
                    IsAutoCommit = true;
                    return 1;
    
                }
                catch (Exception ex)
                {
                    ErrorInfo = ex.Message;
                    IsAutoCommit = true;
                    if (ex.InnerException != null)
                    {
                        throw new Exception(ex.Message, ex.InnerException);
                    }
                    return -1;
                }
                finally
                {
                    IsAutoCommit = true;
                }
            }
            #region 取出错信息
            /// <summary>
            /// 取出错信息
            /// </summary>
            /// <returns></returns>
            public string GetErrText()
            {
                return ErrorInfo;
            }
            #endregion
    
            /// <summary>
            ///深层复制一个实例
            /// </summary>
            /// <returns></returns>
            public object Clone()
            {
                return new DatabaseMyBatis
                {
                    DataMapper = DataMapper,
                    ConnectionString = ConnectionString,
                    ErrorInfo = ErrorInfo,
                    IsAutoCommit = IsAutoCommit,
                    Sequences = Sequences,
                    //  SqlMapperForSequence = SqlMapperForSequence
                };
            }
            private bool _isDisposed;
            /// <summary>
            /// 
            /// </summary>
            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="disposing"></param>
            protected virtual void Dispose(bool disposing)
            {
                if (!_isDisposed)
                {
                    if (disposing)
                    {
                        if (_session != null)
                        {
                            if (_session.Connection != null)
                            {
                                _session.Connection.Close();
                                _session.Connection.Dispose();
                            }
                            _session.Dispose();
                            _session = null;
                        }
                        //if (_sessionFactory != null)
                        //{
                        //    _sessionFactory.Dispose();
                        //    _sessionFactory = null;
                        //}
                        if (_transaction != null)
                        {
                            _transaction.Dispose();
                            _transaction = null;
                        }
    
                        //通过调用托管对象的Dispose()方法释放托管对象
                    }
                    CloseSession();
                    //释放未托管对象的代码
                    //比如关闭数据库的连接,关闭文件句柄等
                }
                _isDisposed = true;
            }
            /// <summary>
            /// 
            /// </summary>
            ~DatabaseMyBatis()
            {
                Dispose(false);
            }
    
        }
    
    
    }

    providers.config

    <?xml version="1.0" encoding="utf-8"?>
    <providers xmlns="http://ibatis.apache.org/providers"	
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <clear/>
      <provider
    		  name="sqlServer1.0"
    		  description="Microsoft SQL Server, provider V1.0.3300.0 in framework .NET V1.0"
    		  enabled="false"
    		  assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection"
    		  commandClass="System.Data.SqlClient.SqlCommand"
    		  parameterClass="System.Data.SqlClient.SqlParameter"
    		  parameterDbTypeClass="System.Data.SqlDbType"
    		  parameterDbTypeProperty="SqlDbType"
    		  dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    		  commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"
    		  usePositionalParameters="false"
    		  useParameterPrefixInSql="true"
    		  useParameterPrefixInParameter="true"
    		  parameterPrefix="@"
    		  allowMARS="false"
      />
      <provider
    		  name="sqlServer1.1"
    		  description="Microsoft SQL Server, provider V1.0.5000.0 in framework .NET V1.1"
    		  enabled="false"
    		  default="true"
    		  assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    		  connectionClass="System.Data.SqlClient.SqlConnection"
    		  commandClass="System.Data.SqlClient.SqlCommand"
    		  parameterClass="System.Data.SqlClient.SqlParameter"
    		  parameterDbTypeClass="System.Data.SqlDbType"
    		  parameterDbTypeProperty="SqlDbType"
    		  dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    		  commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"
    		  usePositionalParameters="false"
    		  useParameterPrefixInSql="true"
    		  useParameterPrefixInParameter="true"
    		  parameterPrefix="@"
    		  allowMARS="false"
      />
      <!--SqlServer 2.0 SQl-->
      <provider
    		name="sqlServer2.0"
    		enabled="false"
    		description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0"
    		assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    		connectionClass="System.Data.SqlClient.SqlConnection"
    		commandClass="System.Data.SqlClient.SqlCommand"
    		parameterClass="System.Data.SqlClient.SqlParameter"
    		parameterDbTypeClass="System.Data.SqlDbType"
    		parameterDbTypeProperty="SqlDbType"
    		dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
    		commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
    		usePositionalParameters = "false"
    		useParameterPrefixInSql = "true"
    		useParameterPrefixInParameter = "true"
    		parameterPrefix="@"
    		allowMARS="false"
        />
      <provider
           name="sqlServer4.0"
           enabled="true"
           default="true"
           description="Microsoft SQL Server, provider V4.0.0.0 in framework .NET V4.0"
           assemblyName="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
           connectionClass="System.Data.SqlClient.SqlConnection"
           commandClass="System.Data.SqlClient.SqlCommand"
           parameterClass="System.Data.SqlClient.SqlParameter"
           parameterDbTypeClass="System.Data.SqlDbType"
           parameterDbTypeProperty="SqlDbType"
           dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
           commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
           usePositionalParameters = "false"
           useParameterPrefixInSql = "true"
           useParameterPrefixInParameter = "true"
           parameterPrefix="@"
           allowMARS="true"
        />
      <provider name="OleDb1.1"
    		  description="OleDb, provider V1.0.5000.0 in framework .NET V1.1"
    		  enabled="false"
    		  assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    		connectionClass="System.Data.OleDb.OleDbConnection"
    		  commandClass="System.Data.OleDb.OleDbCommand"
    		  parameterClass="System.Data.OleDb.OleDbParameter"
    		  parameterDbTypeClass="System.Data.OleDb.OleDbType"
    		  parameterDbTypeProperty="OleDbType"
    		  dataAdapterClass="System.Data.OleDb.OleDbDataAdapter"
    		  commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder"
    		  usePositionalParameters="true"
    		  useParameterPrefixInSql="false"
    		  useParameterPrefixInParameter="false"
    		  parameterPrefix=""
    		allowMARS="false"
        />
      <provider name="OleDb2.0"
    	  description="OleDb, provider V2.0.0.0 in framework .NET V2"
    	  enabled="true"
    	  assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    	  connectionClass="System.Data.OleDb.OleDbConnection"
    	  commandClass="System.Data.OleDb.OleDbCommand"
    	  parameterClass="System.Data.OleDb.OleDbParameter"
    	  parameterDbTypeClass="System.Data.OleDb.OleDbType"
    	  parameterDbTypeProperty="OleDbType"
    	  dataAdapterClass="System.Data.OleDb.OleDbDataAdapter"
    	  commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder"
    	  usePositionalParameters="true"
    	  useParameterPrefixInSql="false"
    	  useParameterPrefixInParameter="false"
    	  parameterPrefix=""
    	  allowMARS="false"
        />
      <provider
    	  name="Odbc1.1"
    	  description="Odbc, provider V1.0.5000.0 in framework .NET V1.1"
    	  enabled="false"
    	  assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    	  connectionClass="System.Data.Odbc.OdbcConnection"
    	  commandClass="System.Data.Odbc.OdbcCommand"
    	  parameterClass="System.Data.Odbc.OdbcParameter"
    	  parameterDbTypeClass="System.Data.Odbc.OdbcType"
    	  parameterDbTypeProperty="OdbcType"
    	  dataAdapterClass="System.Data.Odbc.OdbcDataAdapter"
    	  commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder"
    	  usePositionalParameters="true"
    	  useParameterPrefixInSql="false"
    	  useParameterPrefixInParameter="false"
    	  parameterPrefix="@"
    	  allowMARS="false"
        />
      <!--ODBC 2.0 Support-->
      <provider
    	  name="Odbc2.0"
    	  description="Odbc, provider V2.0.0.0 in framework .NET V2"
    	  enabled="false"
    	  assemblyName="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    	  connectionClass="System.Data.Odbc.OdbcConnection"
    	  commandClass="System.Data.Odbc.OdbcCommand"
    	  parameterClass="System.Data.Odbc.OdbcParameter"
    	  parameterDbTypeClass="System.Data.Odbc.OdbcType"
    	  parameterDbTypeProperty="OdbcType"
    	  dataAdapterClass="System.Data.Odbc.OdbcDataAdapter"
    	  commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder"
    	  usePositionalParameters="true"
    	  useParameterPrefixInSql="false"
    	  useParameterPrefixInParameter="false"
    	  parameterPrefix="@"
    	  allowMARS="false"
      />
    
      <provider
    	  name="oracle9.2"
    	  description="Oracle, Oracle provider V9.2.0.401"
    	  enabled="false"
    	  assemblyName="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
    	  commandClass="Oracle.DataAccess.Client.OracleCommand"
    	  parameterClass="Oracle.DataAccess.Client.OracleParameter"
    	  parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
    	  parameterDbTypeProperty="OracleDbType"
    	  dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
    	  commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
    	  usePositionalParameters="false"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="false"
    	  parameterPrefix=":"
    	  useDeriveParameters="false"
    	  allowMARS="false"
      />
      <provider
    	  name="oracle10.1"
    	  description="Oracle, oracle provider V10.1.0.301"
    	  enabled="false"
    	  assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection"
    	  commandClass="Oracle.DataAccess.Client.OracleCommand"
    	  parameterClass="Oracle.DataAccess.Client.OracleParameter"
    	  parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType"
    	  parameterDbTypeProperty="OracleDbType"
    	  dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter"
    	  commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder"
    	  usePositionalParameters="true"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="true"
    	  parameterPrefix=":"
    	  useDeriveParameters="false"
    	  allowMARS="false"
      />
     
      <!--Oracle Support-->
      <provider
    	  name="oracleClient1.0"
    	  description="Oracle, Microsoft provider V1.0.5000.0"
    	  enabled="false"
    	  assemblyName="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection"
    	  commandClass="System.Data.OracleClient.OracleCommand"
    	  parameterClass="System.Data.OracleClient.OracleParameter"
    	  parameterDbTypeClass="System.Data.OracleClient.OracleType"
    	  parameterDbTypeProperty="OracleType"
    	  dataAdapterClass="System.Data.OracleClient.OracleDataAdapter"
    	  commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder"
    	  usePositionalParameters="false"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="false"
    	  parameterPrefix=":"
    	  allowMARS="false"
      />
      <!--ByteFX Support-->
      <provider
    	  name="ByteFx"
    	  description="MySQL, ByteFx provider V0.7.6.15073"
    	  enabled="false"
    	  assemblyName="ByteFX.MySqlClient, Version=0.7.6.15073, Culture=neutral, PublicKeyToken=f2fef6fed1732fc1" connectionClass="ByteFX.Data.MySqlClient.MySqlConnection"
    	  commandClass="ByteFX.Data.MySqlClient.MySqlCommand"
    	  parameterClass="ByteFX.Data.MySqlClient.MySqlParameter"
    	  parameterDbTypeClass="ByteFX.Data.MySqlClient.MySqlDbType"
    	  parameterDbTypeProperty="MySqlDbType"
    	  dataAdapterClass="ByteFX.Data.MySqlClient.MySqlDataAdapter"
    	  commandBuilderClass="ByteFX.Data.MySqlClient.MySqlCommandBuilder"
    	  usePositionalParameters="false"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="true"
    	  parameterPrefix="@"
    	  allowMARS="false"
      />
      <!--MySql Support-->
      <provider
    	  name="MySql"
    	  description="MySQL, MySQL provider 1.0.7.30072"
    	  enabled="false"
    	  assemblyName="MySql.Data, Version=1.0.7.30072, Culture=neutral, PublicKeyToken=c5687fc88969c44d" 
        connectionClass="MySql.Data.MySqlClient.MySqlConnection"
    	  commandClass="MySql.Data.MySqlClient.MySqlCommand"
    	  parameterClass="MySql.Data.MySqlClient.MySqlParameter"
    	  parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"
    	  parameterDbTypeProperty="MySqlDbType"
    	  dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"
    	  commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"
    	  usePositionalParameters="false"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="true"
    	  parameterPrefix="?"
    	  allowMARS="false"
      />
      <!--SQLite 3 Support-->
      <provider name="SQLite3"
    	  description="SQLite, SQLite.NET provider V1.0.66.0"
    	  enabled="false"
    	  assemblyName="System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"
    	  connectionClass="System.Data.SQLite.SQLiteConnection"  
        commandClass="System.Data.SQLite.SQLiteCommand"  
        parameterClass="System.Data.SQLite.SQLiteParameter"  
        parameterDbTypeClass="System.Data.SQLite.TypeAffinity"  
        parameterDbTypeProperty="DbType"  
        dataAdapterClass="System.Data.SQLite.SQLiteDataAdapter"  
        commandBuilderClass="System.Data.SQLite.SQLiteCommandBuilder"  
        usePositionalParameters="false"  
        useParameterPrefixInSql="true"  
        useParameterPrefixInParameter="true"  
        parameterPrefix="@"  
        setDbParameterPrecision="false"  
        setDbParameterScale="false"  
        allowMARS="false"  
      />
      <!--Firebird Support-->
      <provider
    	  name="Firebird1.7"
    	  description="Firebird, Firebird SQL .NET provider V1.7.0.33200"
    	  enabled="false"
    	  assemblyName="FirebirdSql.Data.Firebird, Version=1.7.0.33200, Culture=neutral, PublicKeyToken=fa843d180294369d" connectionClass="FirebirdSql.Data.Firebird.FbConnection"
    	  commandClass="FirebirdSql.Data.Firebird.FbCommand"
    	  parameterClass="FirebirdSql.Data.Firebird.FbParameter"
    	  parameterDbTypeClass="FirebirdSql.Data.Firebird.FbDbType"
    	  parameterDbTypeProperty="FbDbType"
    	  dataAdapterClass="FirebirdSql.Data.Firebird.FbDataAdapter"
    	  commandBuilderClass="FirebirdSql.Data.Firebird.FbCommandBuilder"
    	  usePositionalParameters="false"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="true"
    	  parameterPrefix="@"
    	  allowMARS="false"
      />
      <!--PostgreSql Support-->
      <provider
    	  name="PostgreSql0.99.1.0"
    	  description="PostgreSql, Npgsql provider V0.99.1.0"
    	  enabled="false"
    	  assemblyName="Npgsql, Version=0.99.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
    	  connectionClass="Npgsql.NpgsqlConnection"
    	  commandClass="Npgsql.NpgsqlCommand"
    	  parameterClass="Npgsql.NpgsqlParameter"
    	  parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
    	  parameterDbTypeProperty="NpgsqlDbType"
    	  dataAdapterClass="Npgsql.NpgsqlDataAdapter"
    	  commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
    	  usePositionalParameters="false"
    	  useParameterPrefixInSql="true"
    	  useParameterPrefixInParameter="true"
    	  parameterPrefix=":"
    	  allowMARS="true"
      />
      <!--PostgreSql 2.2.4.3-->
      <provider
       name="PostgreSql2.2.4.3"
       description="PostgreSql, Npgsql provider V2.2.4.3  .Net Data Provider for PostgreSQL"
       enabled="false"
       assemblyName="Npgsql, Version=2.2.4.3, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
       connectionClass="Npgsql.NpgsqlConnection"
       commandClass="Npgsql.NpgsqlCommand"
       parameterClass="Npgsql.NpgsqlParameter"
       parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
       parameterDbTypeProperty="NpgsqlDbType"
       dataAdapterClass="Npgsql.NpgsqlDataAdapter"
       commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
       usePositionalParameters="false"
       useParameterPrefixInSql="true"
       useParameterPrefixInParameter="true"
       parameterPrefix=":"
       allowMARS="true"
      />
      <!--DB2 Support-->
      <provider
    	  name="iDb2.10"
    	  description="IBM DB2 Provider, V 10.0"
    	  enabled="false"
    	  assemblyName="IBM.Data.DB2.iSeries, Version=10.0.0.0,Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26, Custom=null" connectionClass="IBM.Data.DB2.iSeries.iDB2Connection"
    	  commandClass="IBM.Data.DB2.iSeries.iDB2Command"
    	  parameterClass="IBM.Data.DB2.iSeries.iDB2Parameter"
    	  parameterDbTypeClass="IBM.Data.DB2.iSeries.iDB2DbType"
    	  parameterDbTypeProperty="iDB2DbType"
    	  dataAdapterClass="IBM.Data.DB2.iSeries.iDB2DataAdapter"
    	  commandBuilderClass="IBM.Data.DB2.iSeries.iDB2CommandBuilder"
    	  usePositionalParameters="true"
    	  useParameterPrefixInSql="false"
    	  useParameterPrefixInParameter="false"
    	  parameterPrefix=""
    	  allowMARS="false"
      />
      <provider
    	  name="Informix"
    	  description="Informix NET Provider, 2.81.0.0"
    	  enabled="false"
    	  assemblyName="IBM.Data.Informix, Version=2.81.0.0, Culture=neutral, PublicKeyToken=7c307b91aa13d208"
    	  connectionClass="IBM.Data.Informix.IfxConnection"
    	  commandClass="IBM.Data.Informix.IfxCommand"
    	  parameterClass="IBM.Data.Informix.IfxParameter"
    	  parameterDbTypeClass="IBM.Data.Informix.IfxType"
    	  parameterDbTypeProperty="IfxType"
    	  dataAdapterClass="IBM.Data.Informix.IfxDataAdapter"
    	  commandBuilderClass="IBM.Data.Informix.IfxCommandBuilder"
    	  usePositionalParameters = "true"
    	  useParameterPrefixInSql = "false"
    	  useParameterPrefixInParameter = "false"
    	  useDeriveParameters="false"
    	  allowMARS="false"
    	/>
      <provider
        name="ODP.NET Managed"
        description="Oracle, ODP.NET Managed 4.121.1.0"
        enabled="true"
        assemblyName="Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"
        connectionClass="Oracle.ManagedDataAccess.Client.OracleConnection"
        commandClass="Oracle.ManagedDataAccess.Client.OracleCommand"
        parameterClass="Oracle.ManagedDataAccess.Client.OracleParameter"
        parameterDbTypeClass="Oracle.ManagedDataAccess.Client.OracleDbType"
        parameterDbTypeProperty="OracleDbType"
        dataAdapterClass="Oracle.ManagedDataAccess.Client.OracleDataAdapter"
        commandBuilderClass="Oracle.ManagedDataAccess.Client.OracleCommandBuilder"
        usePositionalParameters="true"
        useParameterPrefixInSql="true"
        useParameterPrefixInParameter="true"
        parameterPrefix=":"
        useDeriveParameters="false"
        allowMARS="false"
    />
    </providers>

    Web.config 

    <?xml version="1.0"?>
    <!--
      有关如何配置 ASP.NET 应用程序的详细信息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
      <configSections>
        <sectionGroup name="iBATIS">
          <section name="logging" type="MyBatis.Common.Logging.ConfigurationSectionHandler,MyBatis.Common"/>
        </sectionGroup>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <appSettings>
        <add key="lo4net.Internal.Debug" value="true"/>
        <add key="ConnectionType" value="Oracle"/>
      </appSettings>
      <connectionStrings>
       
        <add name="SQLSERVER" connectionString="Data Source=10.16.30.40;Initial Catalog=HIS_guye;Persist Security Info=True;User ID=sa;Password=mtkj123!;Max Pool Size=100; Min Pool Size=1;"/>
        <add name="Oracle" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.16.30.30)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=mtemr)));Persist Security Info=True;User ID=MTHOSPITALGUYE;Password=mtkj;"/>
      </connectionStrings>
     
    
      <!--<system.diagnostics>
        <trace autoflush="true">
          <listeners>
            <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener"
                 initializeData="Logslog4net.txt"/>
          </listeners>
        </trace>
      </system.diagnostics>-->
      <iBATIS>
        <!--inline :log4net 节点在App.Config/Web.Config 文件中配置
            file:使用外置配置文件 (需要configFile参数配合使用,<arg key="configFile" value="外部配置文件")
            file-watch: 与"file"一样,只是多了一个监视外部配置文件的变动功能,如果有变动则重新加载配置。
            external:IBatis将不会尝试配置Log4Net。-->
        <logging>
          <logFactoryAdapter type="MyBatis.Common.Logging.Log4Net.Log4NetLoggerFA, MyBatis.Common.Logging.Log4Net">
            <!--<arg key="configType" value="inline"/>-->
            <arg key="configType" value="inline"/>
            <arg key="configFile" value="log4net.config"/>
            <arg key="showLogName" value="true"/>
            <arg key="showDataTime" value="true"/>
            <arg key="level" value="ALL"/>
            <arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:SSS"/>
          </logFactoryAdapter>
        </logging>
      </iBATIS>
      <log4net>
        <!-- 这个日志是系统其他地方写日志时候用到的设置 -->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <!--<file value="./LogsLog_" />
          <appendToFile value="true" />
          <rollingStyle value="Date" />
          <datePattern value="yyyyMMdd'.txt'" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <header value="&#xD;&#xA;" />
            <ConversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline%newline%newline" />
          </layout>-->
          <file value="./Logs"/>
          <param name="AppendToFile" value="true"/>
          <!--日志最大个数,都是最新的-->
          <!--rollingStyle节点为Date时,该节点不起作用-->
          <!--rollingStyle节点为Size时,只能有value个日志-->
          <!--rollingStyle节点为Composite时,每天有value个日志-->
          <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
          <param name="MaxSizeRollBackups" value="100"/>
          <!--防止多线程时不能写Log,官方说线程非安全-->
          <!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
          <!-- 每个文件的大小限制  -->
          <param name="MaximumFileSize" value="10MB"/>
          <!--可以为:Once|Size|Date|Composite-->
          <!--Composite为Size和Date的组合-->
          <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
          <param name="RollingStyle" value="Composite"/>
          <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;"/>
          <param name="StaticLogFileName" value="false"/>
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="Header" value="&#xA;----------------------application startup--------------------------&#xA;"/>
            <param name="Footer" value="&#xA; ----------------------application shutdown--------------------------&#xA;"/>
            <param name="ConversionPattern" value="%d [%t] %-5p %c - (%line)  %m%n"/>
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL"/>
            <param name="LevelMax" value="OFF"/>
          </filter>
        </appender>
        <root>
          <level value="All"/>
          <appender-ref ref="RollingLogFileAppender"/>
        </root>
        <!-- IBatisLogFile的日志 -->
        <appender name="IBatisLogFile" type="log4net.Appender.RollingFileAppender">
          <file value="./LogsiBatis_"/>
          <appendToFile value="true"/>
          <datePattern value="yyyy-MM-dd'.txt'"/>
          <rollingStyle value="Date"/>
          <staticLogFileName value="false"/>
          <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]&#xA;"/>
            <footer value="[Footer]&#xA;"/>
            <conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception"/>
          </layout>
        </appender>
        <!-- IBatisMapperLogFile的日志 -->
        <appender name="IBatisMapperLogFile" type="log4net.Appender.RollingFileAppender">
          <!--<file value="./LogsiBatisMapper_" />
          <appendToFile value="true" />
          <datePattern value="yyyy-MM-dd'.txt'" />
          <rollingStyle value="Date" />
          <staticLogFileName value="false" />-->
          <file value="./Logs"/>
          <param name="AppendToFile" value="true"/>
          <!--日志最大个数,都是最新的-->
          <!--rollingStyle节点为Date时,该节点不起作用-->
          <!--rollingStyle节点为Size时,只能有value个日志-->
          <!--rollingStyle节点为Composite时,每天有value个日志-->
          <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
          <param name="MaxSizeRollBackups" value="50"/>
          <!--防止多线程时不能写Log,官方说线程非安全-->
          <!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
          <!-- 每个文件的大小限制  -->
          <param name="MaximumFileSize" value="10MB"/>
          <!--可以为:Once|Size|Date|Composite-->
          <!--Composite为Size和Date的组合-->
          <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
          <param name="RollingStyle" value="Composite"/>
          <param name="DatePattern" value="&quot;iBatisMapper_&quot;yyyyMMdd&quot;.txt&quot;"/>
          <param name="StaticLogFileName" value="false"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception"/>
          </layout>
        </appender>
        <!-- IBatisCacheLogFile的日志 -->
        <appender name="IBatisCacheLogFile" type="log4net.Appender.RollingFileAppender">
          <file value="./LogsiBatisChache_"/>
          <appendToFile value="true"/>
          <datePattern value="yyyy-MM-dd'.txt'"/>
          <rollingStyle value="Date"/>
          <staticLogFileName value="false"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception"/>
          </layout>
        </appender>
        <!-- 注意一定要加additivity="false",因为异常日志是往上传递的,如果不加这个属性,在系统的总日志里面也会有IBatisNet的日志,这样就重复记录了 -->
        <logger name="MyBatis" additivity="false">
          <level value="All"/>
          <!--如果想增加日志输出目的地,增加<appender-ref>节点就是了,注意后面的ref是在config中配置的appender name-->
          <appender-ref ref="IBatisLogFile"/>
        </logger>
        <!-- 注意一定要加additivity="false",因为异常日志是往上传递的,如果不加这个属性,在系统的总日志里面,以及IBatisNet里的日志里,也会有IBatisNet.DataMapper的日志,这样就重复记录了 -->
        <!--<logger name="IBatisNet.DataMapper" >
          <level value="ALL"/>
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>-->
        <!-- Print only messages of level DEBUG or above in the packages -->
        <logger name="MyBatis.DataMapper" additivity="false">
          <level value="DEBUG"/>
          <appender-ref ref="IBatisMapperLogFile"/>
        </logger>
        <!-- Print only messages of level DEBUG or above in the packages -->
        <logger name="MyBatis.DataMapper.Model.Cache.CacheModel" additivity="false">
          <appender-ref ref="IBatisCacheLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <!--<logger name="MyBatis.DataMapper.Model.Statements.PreparedStatementFactory"  additivity="false">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>-->
        <logger name="MyBatis.DataMapper.DefaultMapperFactory">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <logger name="MyBatis.DataMapper.Proxy.LazyListGenericFactory">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <logger name="MyBatis.DataMapper.Proxy.LazyLoadProxyFactory">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <logger name="MyBatis.DataMapper.Session.Transaction.Ado.AdoTransactionFactory">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <logger name="MyBatis.DataMapper.Session.Stores.SessionStoreFactory">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <logger name="MyBatis.DataMapper.Session.DefaultSessionFactory">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <!--<logger name="MyBatis.DataMapper.Model.DefaultModelStore">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>-->
        <logger name="MyBatis.DataMapper.DataMapper">
          <appender-ref ref="IBatisMapperLogFile"/>
          <level value="DEBUG"/>
        </logger>
        <!--<logger name="MyBatis.DataMapper.Data.PreparedCommandFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.DataExchange.DataExchangeFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Session.Stores.SessionStoreFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>-->
        <!--<logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
          <level value="ALL" />
          <appender-ref ref="IBatisCacheLogFile" />
        </logger>
        <logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataMapper.LazyLoadList">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataAccess.DaoSession">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataMapper.SqlMapSession">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.Common.Transaction.TransactionScope">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>-->
      </log4net>
      <!--
        有关 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。
    
        可在 <httpRuntime> 标记上设置以下特性。
          <system.Web>
            <httpRuntime targetFramework="4.5" />
          </system.Web>
      -->
      <system.web>
        <webServices>
          <protocols>
            <add name="HttpSoap"/>
            <add name="HttpPost"/>
            <add name="HttpGet"/>
            <add name="Documentation"/>
          </protocols>
        </webServices>
        <compilation debug="true" targetFramework="4.5"/>
        <httpRuntime maxRequestLength="2097151" maxQueryStringLength="2097151" useFullyQualifiedRedirectUrl="true" executionTimeout="200"/>
        <pages controlRenderingCompatibilityVersion="4.0"/>
      </system.web>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-1.2.15.0" newVersion="1.2.15.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <system.serviceModel>
        <protocolMapping>
          <remove scheme="http"/>
          <remove scheme="net.tcp"/>
          <add scheme="http" binding="wsHttpBinding" bindingConfiguration="emrwsHttpBinding"/>
          <add scheme="http" binding="basicHttpBinding" bindingConfiguration="emrbasicHttpBinding"/>
          <add scheme="net.tcp" binding="netTcpContextBinding" bindingConfiguration="emrnetcpContextBinding"/>
          <add scheme="https" binding="wsHttpContextBinding" bindingConfiguration="emrWsHttpContextBinding"/>
        </protocolMapping>
        <bindings>
          <wsHttpBinding>
            <binding name="emrwsHttpBinding" closeTimeout="00:01:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" allowCookies="true">
              <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
              <security mode="None">
                <transport clientCredentialType="None"/>
                <message clientCredentialType="Certificate"/>
              </security>
            </binding>
          </wsHttpBinding>
          <basicHttpBinding>
            <binding name="emrbasicHttpBinding" closeTimeout="00:01:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom" allowCookies="true">
              <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
              <security mode="None">
                <transport clientCredentialType="None"/>
                <message clientCredentialType="Certificate"/>
              </security>
            </binding>
          </basicHttpBinding>
          <!--<wsHttpContextBinding>
            <binding name="ExaWsHttpContextBinding" closeTimeout="00:01:00"
              openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:10:00"
              maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
              messageEncoding="Mtom" allowCookies="true">
              <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <reliableSession inactivityTimeout="00:20:00" enabled="true" />
              <security mode="None">
                <transport clientCredentialType="None" />
                <message clientCredentialType="Certificate" />
              </security>
            </binding>
          </wsHttpContextBinding>-->
          <netTcpContextBinding>
            <binding name="emrnetcpContextBinding" transactionFlow="true" closeTimeout="00:01:00" openTimeout="00:20:00" receiveTimeout="00:20:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="500" maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
              <reliableSession enabled="true" ordered="true" inactivityTimeout="00:20:00"/>
              <security mode="None">
                <message clientCredentialType="Certificate"/>
              </security>
            </binding>
          </netTcpContextBinding>
        </bindings>
        <services>
          <service behaviorConfiguration="behavior_1" name="MT.Hospital.WebService.EmrService">
            <clear/>
            <endpoint address="mex" binding="mexHttpBinding" name="MexBehavior" contract="IMetadataExchange"/>
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="emrwsHttpBinding" name="emrwsHttpBinding" contract="MT.Hospital.WebService.IEmrService">
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <endpoint address="EmrApi" binding="basicHttpBinding" bindingConfiguration="emrbasicHttpBinding" name="emrbasicHttpBinding" contract="MT.Hospital.WebService.IEmrService">
              <identity>
                <dns value="localhost"/>
              </identity>
            </endpoint>
            <endpoint address="net.tcp" binding="netTcpContextBinding" bindingConfiguration="emrnetcpContextBinding" name="emrnetcpContextBinding" contract="MT.Hospital.WebService.IEmrService"/>
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8099/EmrApi"/>
                <add baseAddress="net.tcp://localhost:50001"/>
              </baseAddresses>
              <timeouts closeTimeout="00:01:00" openTimeout="00:20:00"/>
            </host>
          </service>
          <service behaviorConfiguration="behavior_1" name="MT.Hospital.WebService.NetTcp.EmrService">
            <clear/>
            <endpoint address="mex" binding="mexHttpBinding" name="MexBehavior" contract="IMetadataExchange"/>
            <endpoint address="net.tcp" binding="netTcpContextBinding" bindingConfiguration="emrnetcpContextBinding" name="emrnetcpContextBinding" contract="MT.Hospital.WebService.NetTcp.IEmrService"/>
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:50001/Service"/>
                <add baseAddress="http://localhost:8099/"/>
              </baseAddresses>
              <timeouts closeTimeout="00:01:00" openTimeout="00:20:00"/>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="behavior_1">
              <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500"/>
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
              <serviceTimeouts transactionTimeout="00:20:00"/>
              <dataContractSerializer maxItemsInObjectGraph="65536000"/>
            </behavior>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true"/>
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
    </configuration>

    log4net.config 

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup name="iBATIS">
          <section name="logging" type="MyBatis.Common.Logging.ConfigurationSectionHandler,MyBatis.Common" />
        </sectionGroup>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
      </configSections>
      <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
      </appSettings>
      
      <iBATIS>
        <logging>
          <logFactoryAdapter type="MyBatis.Common.Logging.Log4Net.Log4NetLoggerFA, MyBatis.Common.Logging.Log4Net">
            <arg key="configType" value="inline" />
            <arg key="showLogName" value="true" />
            <arg key="showDateTime" value="true" />
            <arg key="level" value="All" />
            <arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:SSS" />
          </logFactoryAdapter>
        </logging>
      </iBATIS>
      <!--每个<appender>子节点代表一种记录日志的方式-->
      <log4net>
        <!-- 这个日志是系统其他地方写日志时候用到的设置 -->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="./Logs" />
          <param name="AppendToFile" value="true" />
          <!--日志最大个数,都是最新的-->
          <!--rollingStyle节点为Date时,该节点不起作用-->
          <!--rollingStyle节点为Size时,只能有value个日志-->
          <!--rollingStyle节点为Composite时,每天有value个日志-->
          <!-- 切割最多文件数 -1表示不限制产生日志文件数-->
          <param name="MaxSizeRollBackups" value="100"/>
          <!--防止多线程时不能写Log,官方说线程非安全-->
          <!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!-- 每个文件的大小限制  -->
          <param name="MaximumFileSize" value="10MB"/>
          <!--可以为:Once|Size|Date|Composite-->
          <!--Composite为Size和Date的组合-->
          <!-- RollingStyle Composite 综合  Size 按大小  Date 按时间 -->
          <param name="RollingStyle" value="Composite" />
          <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
          <param name="StaticLogFileName" value="false" />
          <layout type="log4net.Layout.PatternLayout,log4net">
            <param name="Header" value="&#xD;&#xA;----------------------application startup--------------------------&#xD;&#xA;" />
            <param name="Footer" value="&#xD;&#xA; ----------------------application shutdown--------------------------&#xD;&#xA;" />
            <param name="ConversionPattern" value="%d [%t] %-5p %c - (%line)  %m%n" />
          </layout>
          <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="OFF" />
          </filter>
        </appender>
        <root>
          <level value="All" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
    
        <!-- IBatisLogFile的日志 -->
    
        <appender name="IBatisLogFile" type="log4net.Appender.RollingFileAppender">
          <file value="./LogsiBatis_" />
          <appendToFile value="true" />
          <datePattern value="yyyy-MM-dd'.txt'" />
          <rollingStyle value="Date" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <header value="[Header]&#13;&#10;" />
            <footer value="[Footer]&#13;&#10;" />
            <conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception" />
          </layout>
        </appender>
    
        <!-- IBatisMapperLogFile的日志 -->
    
        <appender name="IBatisMapperLogFile" type="log4net.Appender.RollingFileAppender">
          <file value="./LogsiBatisMapper_" />
          <appendToFile value="true" />
          <datePattern value="yyyy-MM-dd'.txt'" />
          <rollingStyle value="Date" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception" />
          </layout>
        </appender>
    
        <!-- IBatisCacheLogFile的日志 -->
    
        <appender name="IBatisCacheLogFile" type="log4net.Appender.RollingFileAppender">
          <file value="./LogsiBatisChache_" />
          <appendToFile value="true" />
          <datePattern value="yyyy-MM-dd'.txt'" />
          <rollingStyle value="Date" />
          <staticLogFileName value="false" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date{dd/MM/yyyy-HH:mm:ss} %m%newline%exception" />
          </layout>
        </appender>
    
    
    
        <!-- 注意一定要加additivity="false",因为异常日志是往上传递的,如果不加这个属性,在系统的总日志里面也会有IBatisNet的日志,这样就重复记录了 -->
        <logger name="MyBatis" additivity="false">
          <level value="All"/>
    
          <!--如果想增加日志输出目的地,增加<appender-ref>节点就是了,注意后面的ref是在config中配置的appender name-->
          <appender-ref ref="IBatisLogFile" />
        </logger>
    
        <!-- 注意一定要加additivity="false",因为异常日志是往上传递的,如果不加这个属性,在系统的总日志里面,以及IBatisNet里的日志里,也会有IBatisNet.DataMapper的日志,这样就重复记录了 -->
    
        <!--<logger name="IBatisNet.DataMapper" >
          <level value="ALL"/>
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>-->
    
        <!-- Print only messages of level DEBUG or above in the packages -->
        <logger name="MyBatis.DataMapper" >
          <level value="DEBUG"/>
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
    
        <!-- Print only messages of level DEBUG or above in the packages -->
        <logger name="MyBatis.DataMapper.Model.Cache.CacheModel">
          <appender-ref ref="IBatisCacheLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Model.Statements.PreparedStatementFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.DefaultMapperFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Proxy.LazyListGenericFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Session.Transaction.Ado.AdoTransactionFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Session.Stores.SessionStoreFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Session.DefaultSessionFactory">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.Model.DefaultModelStore">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.DataMapper">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <logger name="MyBatis.DataMapper.DataMapper">
          <appender-ref ref="IBatisMapperLogFile" />
          <level value="DEBUG" />
        </logger>
        <!--<logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
          <level value="ALL" />
          <appender-ref ref="IBatisCacheLogFile" />
        </logger>
        <logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataMapper.LazyLoadList">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataAccess.DaoSession">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataMapper.SqlMapSession">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.Common.Transaction.TransactionScope">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>
        <logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
          <level value="ALL" />
          <appender-ref ref="IBatisMapperLogFile" />
        </logger>-->
      </log4net>
    </configuration>
  • 相关阅读:
    小程序生命周期
    async/await实现图片的串行、并行加载
    移动应用区别
    小程序组件
    secureCRT
    LInux
    java实现八大排序算法
    求出所有排列 去重全排列 回溯算法
    二分法基本思想
    异常
  • 原文地址:https://www.cnblogs.com/wangyinlon/p/10907100.html
Copyright © 2020-2023  润新知