﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-在代码的海洋中,用心才会赢.....-随笔分类-.net</title><link>http://www.blogjava.net/jsdk999/category/17765.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:09:33 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:09:33 GMT</pubDate><ttl>60</ttl><item><title>.net实现的数据库链接池</title><link>http://www.blogjava.net/jsdk999/archive/2006/12/01/84892.html</link><dc:creator>WindDC</dc:creator><author>WindDC</author><pubDate>Fri, 01 Dec 2006 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/jsdk999/archive/2006/12/01/84892.html</guid><wfw:comment>http://www.blogjava.net/jsdk999/comments/84892.html</wfw:comment><comments>http://www.blogjava.net/jsdk999/archive/2006/12/01/84892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jsdk999/comments/commentRss/84892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jsdk999/services/trackbacks/84892.html</trackback:ping><description><![CDATA[
		<p>        本文是用.net实现的数据库链接池,大体体现了数据库链接池的实现思想,ADO.NET已经提供了很好的链接池维护,所以本程序基本没有什么实用价值:<br /><br />1.链接池管理类<br />using System;<br />using System.Data;<br />using System.Data.SqlClient;<br />using System.Data.OleDb;<br />using System.Collections;<br />using System.Configuration;</p>
		<p>/// &lt;summary&gt;<br />/// DbConnectionPool 的摘要说明<br />/// &lt;/summary&gt;</p>
		<p>namespace dbopr<br />{<br />    public class DbConnectionPool<br />    {<br />        //定义存放数据库链接的队列<br />        private static Queue connections=new Queue();</p>
		<p>        //数据库参数<br />        private static string ConnString = "";                                    //链接字符串</p>
		<p>        //链接池参数<br />        private static int InitSize = 20;                                         //初始化链接池大小<br />        private static int MaxSize = 100;                                         //最大链接数<br />        private static int QueueSize = 50;                                        //队列中最大维护的链接数<br />        private static int ConnNum = 0;                                           //系统维护的链接总数</p>
		<p>
				<br />        //定义数据库类型，1表示为SqlServer数据库，2表示其它的OLE DB；默认为SqlServer<br />        private static int  DbType = 1;<br />        public static int DbType<br />        {<br />            set<br />            {<br />                DbType = value;<br />            }<br />        }</p>
		<p>        private DbConnectionPool()<br />        {<br />            try{<br />                ConnString = Configuration.connectionStrings["DbSource"].connectionString;<br />                InitSize = int.Parse(Configuration.connectionStrings["InitSize"].connectionString);<br />                MaxSize = int.Parse(Configuration.connectionStrings["MaxSize"].connectionString);<br />                QueueSize = int.Parse(Configuration.connectionStrings["QueueSize"].connectionString);<br />                DbType = int.Parse(Configuration.connectionStrings["DbType"].connectionString);<br />                initPool();<br />            }<br />            catch(Exception e) {<br />            }<br />        }<br />        <br />        //初始化链接池<br />        private static void initPool(){<br />            int i;<br />            for (i = 1; i &lt;= InitSize; i++) {<br />                if (DbType == 1)<br />                    connections.Enqueue(newSqlConn());<br />                else<br />                    connections.Enqueue(newOleConn());<br />            }<br />        }</p>
		<p>        //获取一个Sql Server链接对象<br />        private static SqlConnection newSqlConn()<br />        {<br />            ConnNum++;<br />            return new SqlConnection(ConnString);<br />        }<br />        <br />        //获取一个OLE DB链接对像<br />        private static OleDbConnection newOleConn() <br />        {<br />            ConnNum++;<br />            return new OleDbConnection(ConnString);<br />        }</p>
		<p>        //获取一个数据库链接<br />        public static IDbConnection getConn() {<br />            if (connections.Count == 0)                                  //如果队列中链接用完，则新建一个链接放入队列<br />            {<br />                if (ConnNum &gt; MaxSize)                                   //如果当前活动链接达到最大，则等待链接<br />                    return null;<br />                else<br />                {<br />                    if (DbType == 1)<br />                        connections.Enqueue(newSqlConn());<br />                    else<br />                        connections.Enqueue(newOleConn());<br />                    return connections.Dequeue();<br />                }<br />            }<br />            else<br />                return connections.Dequeue();<br />        }</p>
		<p>        //释放一个活运链接<br />        public static void reConn(IDbConnection conn) {<br />            if (connections.Count &gt; QueueSize)                           //如果队列中元素个数已达到最大，则关闭链接<br />                conn.Close();<br />            else<br />                connections.Enqueue(conn);<br />        }</p>
		<p>        //销毁链接池<br />        public static void ClearPool() {<br />            while(connections.Count&gt;0)<br />                 (IDbConnection)connections.Dequeue().Close();<br />        }<br />    }<br />}<br /><br />2.链接生成类<br />using System;<br />using System.Data;<br />using System.Data.SqlClient;<br />using System.Data.OleDb;<br />using System.Configuration;<br />using System.Web;</p>
		<p>/// &lt;summary&gt;<br />/// DbConn 的摘要说明<br />/// &lt;/summary&gt;</p>
		<p>namespace dbopr<br />{<br />    public class DbConnection<br />    {<br />        private static IDbConnection conn;<br />        <br />        public DbConnection()<br />        {<br />            //<br />            // TODO: 在此处添加构造函数逻辑<br />            //<br />        }</p>
		<p>        public static SqlConnection getSqlConn()<br />        {<br />            //获取链接池中的Sql Server的链接<br />            conn = DbConnectionPool.getConn();<br />            return (SqlConnection)conn;<br />        }</p>
		<p>        public static OleDbConnection getOleConn() {<br />            //获取其它OLE DB的链接<br />            conn = DbConnectionPool.getConn();<br />            return (OleDbConnection)conn;<br />        }</p>
		<p>        public static void Close() {<br />            //放回用过的链接<br />            DbConnectionPool.reConn(conn);<br />        }<br />    }<br />}</p>
<img src ="http://www.blogjava.net/jsdk999/aggbug/84892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jsdk999/" target="_blank">WindDC</a> 2006-12-01 17:11 <a href="http://www.blogjava.net/jsdk999/archive/2006/12/01/84892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>