Пример #1
0
 public static void PushDBConnection(MyDbConnection2 conn)
 {
     if (conn != null)
     {
         DbHelperMySQL3.SemaphoreClientsNoPool.Release();
         conn.Close();
     }
 }
Пример #2
0
        /// <summary>
        /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )
        /// 因为外部要读取数据,不能立即回收连接,所以以MyDataReader封装一下关闭回收连接的操作
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>MySqlDataReader</returns>
        public static MyDataReader ExecuteReader(string dbKey, string strSQL)
        {
            MyDbConnection2 conn = null;

            conn = PopDBConnection(dbKey);
            if (null != conn)
            {
                MySqlDataReader mySqlDataReader = conn.ExecuteReader(strSQL);
                MyDataReader    myDataReader    = new MyDataReader(conn, mySqlDataReader);
                return(myDataReader);
            }

            return(null);
        }
Пример #3
0
        /// <summary>
        /// 将数据库连接添加到空闲数据库连接中
        /// </summary>
        /// <param name="conn"></param>
        public static void PushDBConnection(MyDbConnection2 conn)
        {
            if (UsePool)
            {
                if (null != conn)
                {
                    MyDbConnectionPool pool = null;
                    lock (Mutex)
                    {
                        if (!DBConnsDict.TryGetValue(conn.DatabaseKey, out pool))
                        {
                            pool = new MyDbConnectionPool();
                            DBConnsDict[conn.DatabaseKey] = pool;
                        }
                    }

                    if (null != pool)
                    {
                        lock (Mutex)
                        {
                            if (pool.ConnCount <= MaxCount && conn.IsConnected())
                            {
                                lock (pool.DBConns)
                                {
                                    pool.DBConns.Enqueue(conn);
                                }

                                pool.SemaphoreClients.Release();
                            }
                            else
                            {
                                pool.ConnCount--;
                                conn.Close();
                            }
                        }
                    }
                }
            }
            else
            {
                if (conn != null)
                {
                    SemaphoreClientsNoPool.Release();
                    conn.Close();
                }
            }
        }
Пример #4
0
        public static void ExecuteSqlTranWithIndentity(string dbKey, Hashtable SQLStringList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null != conn)
                {
                    conn.ExecuteSqlTranWithIndentity(SQLStringList);
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
        }
Пример #5
0
        public static MyDataReader ExecuteReader(string dbKey, string strSQL)
        {
            MyDbConnection2 conn = DbHelperMySQL3.PopDBConnection(dbKey);
            MyDataReader    result;

            if (null != conn)
            {
                MySqlDataReader mySqlDataReader = conn.ExecuteReader(strSQL, new MySqlParameter[0]);
                MyDataReader    myDataReader    = new MyDataReader(conn, mySqlDataReader);
                result = myDataReader;
            }
            else
            {
                result = null;
            }
            return(result);
        }
Пример #6
0
        public static object GetSingle(string dbKey, string SQLString, int Times)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.GetSingle(SQLString, Times, new MySqlParameter[0]));
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(null);
        }
Пример #7
0
        public static int ExecuteSqlInsertImg(string dbKey, string strSQL, List <Tuple <string, byte[]> > imgList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.ExecuteSqlInsertImg(strSQL, imgList));
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(-1);
        }
Пример #8
0
        public static object ExecuteSqlGet(string dbKey, string SQLString, string content)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null == conn)
                {
                    return(conn.ExecuteSqlGet(SQLString, content));
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(null);
        }
Пример #9
0
        public static int ExecuteSqlTran(string dbKey, List <string> SQLStringList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.ExecuteSqlTran(SQLStringList));
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(0);
        }
Пример #10
0
        public static int ExecuteSqlTran(string dbKey, List <CommandInfo> list, List <CommandInfo> oracleCmdSqlList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.ExecuteSqlTran(list, oracleCmdSqlList));
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(0);
        }
Пример #11
0
        public static int ExecuteSqlByTime(string dbKey, string SQLString, int Times)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.ExecuteNonQuery(SQLString, Times));
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(-1);
        }
Пример #12
0
        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string dbKey, string SQLString, params MySqlParameter[] cmdParms)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return(null);
                }

                return(conn.Query(SQLString, cmdParms));
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #13
0
        /// <summary>
        /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>MySqlDataReader</returns>
        public static MySqlDataReader ExecuteReader(string dbKey, string SQLString, params MySqlParameter[] cmdParms)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return(null);
                }

                return(conn.ExecuteReader(SQLString, cmdParms));
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #14
0
        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
        public static void ExecuteSqlTranWithIndentity(string dbKey, Hashtable SQLStringList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return;
                }

                conn.ExecuteSqlTranWithIndentity(SQLStringList);
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #15
0
        /// <summary>
        /// 执行一条计算查询结果语句,返回查询结果(object)。
        /// </summary>
        /// <param name="SQLString">计算查询结果语句</param>
        /// <returns>查询结果(object)</returns>
        public static object GetSingle(string dbKey, string SQLString, params MySqlParameter[] cmdParms)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return(-1);
                }

                return(conn.GetSingle(SQLString, 0, cmdParms));
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #16
0
        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
        public static int ExecuteSqlTran(string dbKey, System.Collections.Generic.List <CommandInfo> cmdList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return(-1);
                }

                return(conn.ExecuteSqlTran(cmdList));
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #17
0
        /// <summary>
        /// 执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
        public static void ExecuteSqlTranWithIndentity(string dbKey, System.Collections.Generic.List <CommandInfo> SQLStringList)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return;
                }

                conn.ExecuteSqlTranWithIndentity(SQLStringList);
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #18
0
        public static DataSet Query(string dbKey, string SQLString, int Times)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null == conn)
                {
                    return(null);
                }

                return(conn.Query(SQLString, Times));
            }
            finally
            {
                PushDBConnection(conn);
            }
        }
Пример #19
0
        public static object GetSingle(string dbKey, string SQLString, int Times)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.GetSingle(SQLString, Times));
                }
            }
            finally
            {
                PushDBConnection(conn);
            }

            return(null);
        }
Пример #20
0
        /// <summary>
        /// 执行带一个存储过程参数的的SQL语句。
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
        /// <returns>影响的记录数</returns>
        public static int ExecuteSql(string dbKey, string SQLString, string content)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.ExecuteWithContent(SQLString, content));
                }
            }
            finally
            {
                PushDBConnection(conn);
            }

            return(0);
        }
Пример #21
0
        /// <summary>
        /// 执行SQL语句,返回影响的记录数
        /// </summary>
        /// <param name="SQLString">SQL语句</param>
        /// <returns>影响的记录数</returns>
        public static int ExecuteSql(string dbKey, string SQLString)
        {
            MyDbConnection2 conn = null;

            try
            {
                conn = PopDBConnection(dbKey);
                if (null != conn)
                {
                    return(conn.ExecuteNonQuery(SQLString));
                }
            }
            finally
            {
                PushDBConnection(conn);
            }

            return(-1);
        }
Пример #22
0
        public static MyDbConnection2 PopDBConnection(string dbKey)
        {
            MyDbConnection2 conn = null;

            DbHelperMySQL3.SemaphoreClientsNoPool.WaitOne();
            try
            {
                string connectionString;
                lock (DbHelperMySQL3.Mutex)
                {
                    if (!DbHelperMySQL3.ConnectionStringDict.TryGetValue(dbKey, out connectionString))
                    {
                        connectionString = PubConstant.ConnectionString;
                        string dbName       = PubConstant.GetDatabaseName(dbKey);
                        int    idx0         = connectionString.IndexOf("database=") + "database=".Length;
                        int    idx          = connectionString.IndexOf(';', idx0);
                        string datebaseName = connectionString.Substring(idx0, idx - idx0);
                        connectionString = connectionString.Replace(datebaseName, dbName);
                        DbHelperMySQL3.ConnectionStringDict[dbKey] = connectionString;
                    }
                }
                conn = new MyDbConnection2(connectionString, DbHelperMySQL3.CodePageNames);
                if (!conn.Open())
                {
                    conn = null;
                }
            }
            catch (Exception ex)
            {
                conn = null;
            }
            finally
            {
                if (null == conn)
                {
                    DbHelperMySQL3.SemaphoreClientsNoPool.Release();
                }
            }
            return(conn);
        }
Пример #23
0
        public static int ExecuteSqlTran(string dbKey, List <CommandInfo> cmdList)
        {
            MyDbConnection2 conn = null;
            int             result;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null == conn)
                {
                    result = -1;
                }
                else
                {
                    result = conn.ExecuteSqlTran(cmdList);
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(result);
        }
Пример #24
0
        public static object GetSingle(string dbKey, string SQLString, params MySqlParameter[] cmdParms)
        {
            MyDbConnection2 conn = null;
            object          result;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null == conn)
                {
                    result = -1;
                }
                else
                {
                    result = conn.GetSingle(SQLString, 0, cmdParms);
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(result);
        }
Пример #25
0
        public static MySqlDataReader ExecuteReader(string dbKey, string SQLString, params MySqlParameter[] cmdParms)
        {
            MyDbConnection2 conn = null;
            MySqlDataReader result;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null == conn)
                {
                    result = null;
                }
                else
                {
                    result = conn.ExecuteReader(SQLString, cmdParms);
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(result);
        }
Пример #26
0
        public static DataSet Query(string dbKey, string SQLString, params MySqlParameter[] cmdParms)
        {
            MyDbConnection2 conn = null;
            DataSet         result;

            try
            {
                conn = DbHelperMySQL3.PopDBConnection(dbKey);
                if (null == conn)
                {
                    result = null;
                }
                else
                {
                    result = conn.Query(SQLString, cmdParms);
                }
            }
            finally
            {
                DbHelperMySQL3.PushDBConnection(conn);
            }
            return(result);
        }
Пример #27
0
        /// <summary>
        /// 从连接队列中取一个空闲数据库连接
        /// </summary>
        /// <returns></returns>
        public static MyDbConnection2 PopDBConnection(string dbKey)
        {
            MyDbConnection2 conn = null;

            if (UsePool)
            {
                int round = 0;
                MyDbConnectionPool pool = null;
                lock (Mutex)
                {
                    if (!DBConnsDict.TryGetValue(dbKey, out pool))
                    {
                        string connectionString = PubConstant.ConnectionString;
                        string dbName           = PubConstant.GetDatabaseName(dbKey);
                        if (null == dbName)
                        {
                            return(null);
                        }

                        int    idx0         = connectionString.IndexOf("database=") + "database=".Length;
                        int    idx1         = connectionString.IndexOf(';', idx0);
                        string datebaseName = connectionString.Substring(idx0, idx1 - idx0);

                        pool = new MyDbConnectionPool();
                        DBConnsDict[dbKey]    = pool;
                        pool.DatabaseKey      = dbKey;
                        pool.ConnectionString = connectionString.Replace(datebaseName, dbName);
                    }
                }

                if (null != pool)
                {
                    do
                    {
                        //防止无法获取, 阻塞等待
                        if (pool.SemaphoreClients.WaitOne(1000))
                        {
                            lock (pool.DBConns)
                            {
                                conn = pool.DBConns.Dequeue();
                                break;
                            }
                        }
                        else
                        {
                            lock (Mutex)
                            {
                                if (pool.ConnCount < MaxCount)
                                {
                                    try
                                    {
                                        conn = new MyDbConnection2(pool.ConnectionString, CodePageNames);
                                        if (conn.Open())
                                        {
                                            conn.DatabaseKey = dbKey;
                                            pool.ConnCount++;
                                            break;
                                        }
                                    }
                                    catch (System.Exception ex)
                                    {
                                        LogManager.WriteExceptionUseCache(ex.ToString());
                                    }
                                }
                            }
                        }
                    } while (round++ < 150);
                }
            }
            else
            {
                SemaphoreClientsNoPool.WaitOne();

                try
                {
                    string connectionString;
                    bool   change = false;
                    lock (Mutex)
                    {
                        if (!ConnectionStringDict.TryGetValue(dbKey, out connectionString))
                        {
                            connectionString = PubConstant.ConnectionString;
                            string dbName       = PubConstant.GetDatabaseName(dbKey);
                            int    idx0         = connectionString.IndexOf("database=") + "database=".Length;
                            int    idx1         = connectionString.IndexOf(';', idx0);
                            string datebaseName = connectionString.Substring(idx0, idx1 - idx0);
                            connectionString            = connectionString.Replace(datebaseName, dbName);
                            ConnectionStringDict[dbKey] = connectionString;
                        }
                    }

                    conn = new MyDbConnection2(connectionString, CodePageNames);
                    if (!conn.Open())
                    {
                        conn = null;
                    }
                }
                catch (System.Exception ex)
                {
                    conn = null;
                }
                finally
                {
                    if (null == conn)
                    {
                        SemaphoreClientsNoPool.Release();
                    }
                }
            }

            return(conn);
        }