这个是我参考JAVA连接池写的,也手动测试了,感觉没什么效果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Oracle.DataAccess.Client;
using System.Threading;
using System.Data;
namespace DBHelp
{
public class ConnectionPool
{
/// <summary>
/// 最少连接数
/// </summary>
private static int minConn;
/// <summary>
/// 最大连接数
/// </summary>
private static int maxConn;
/// <summary>
/// 现有连接数
/// </summary>
private static int connAmount;
/// <summary>
/// 使用Stack保存数据库连接
/// </summary>
private static Stack connStack;
/// <summary>
/// 连接池类对象
/// </summary>
private static ConnectionPool connectionPoll;
/// <summary>
/// 繁忙时等待时间
/// </summary>
private static int waitTime;
/// <summary>
/// 连接字符串
/// </summary>
private static string connstr = null;
string serverPath = System.Reflection.Assembly.GetExecutingAssembly().Location.Substring(0, System.Reflection.Assembly.GetExecutingAssembly().Location.LastIndexOf("\\"));
/// <summary>
/// 程序运行时,创建一个静态只读的进程辅助对象
/// </summary>
private static readonly object _object = new object();
/// <summary>
/// 返回一个实例,如果是第一次调用此方法则创建一个新实例
/// </summary>
/// <returns></returns>
public static ConnectionPool getInstance()
{
if (connectionPoll == null)
{
lock (_object)
{
connectionPoll = new ConnectionPool();
}
}
return connectionPoll;
}
/// <summary>
/// 读取属性文件获得数据库连接信息及连接池信息
/// </summary>
public string getConn()
{
if (connstr == null)
{
try
{
ArrayList host = getConfig.PrintAttributes(serverPath + "\\config.xml", "datehost");
ArrayList port = getConfig.PrintAttributes(serverPath + "\\config.xml", "dateport");
ArrayList user = getConfig.PrintAttributes(serverPath + "\\config.xml", "dateuser");
ArrayList password = getConfig.PrintAttributes(serverPath + "\\config.xml", "datepassword");
ArrayList databasename = getConfig.PrintAttributes(serverPath + "\\config.xml", "databasename");
ArrayList CminConn = getConfig.PrintAttributes(serverPath + "\\config.xml", "minConn");
ArrayList CmaxConn = getConfig.PrintAttributes(serverPath + "\\config.xml", "maxConn");
ArrayList CwaitTime = getConfig.PrintAttributes(serverPath + "\\config.xml", "waitTime");
minConn = Convert.ToInt32(CminConn[0].ToString());
maxConn = Convert.ToInt32(CmaxConn[0].ToString());
waitTime = Convert.ToInt32(CwaitTime[0].ToString());
connstr = "Data Source=(DESCRIPTION="
+ "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + host[0].ToString() + ")(PORT=" + port[0].ToString() + ")))"
+ "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" + databasename[0].ToString() + ")));"
+ "User Id=" + user[0].ToString() + ";Password=" + password[0].ToString() + ";";
}
catch (Exception ex)
{
throw ex;
}
} return connstr;
}
/// <summary>
/// 连接池
/// </summary>
public ConnectionPool()
{
getConn();
connStack = new Stack();
for (int i = 0; i < minConn; i++)
{
connStack.Push(newConnection());
}
}
/// <summary>
/// 从连接池中得到连接
/// </summary>
/// <returns></returns>
public static OracleConnection getConnection()
{
OracleConnection conn = null;
if (connStack.Count > 0)
{
conn = (OracleConnection)connStack.Pop();
}
else if (connAmount < maxConn)
{
conn = newConnection();
}
else
{
try
{
Thread.Sleep(waitTime);//等待一会
Console.WriteLine("等待……");
return getConnection();
}
catch (Exception ex)
{
throw ex;
}
}
return conn;
}
/// <summary>
/// 归还连接
/// </summary>
/// <param name="conn"></param>
public static void freeConnection(OracleConnection conn)
{
connStack.Push(conn);
}
/// <summary>
/// 创建新连接
/// </summary>
/// <returns></returns>
public static OracleConnection newConnection()
{
OracleConnection conn = null;
try
{
conn = new OracleConnection(connstr);
connAmount++;
Console.WriteLine("连接池创建一个连接" + conn.ToString() + "现在连接池中的连接数是:" + connAmount);
if (conn != null && conn.State != ConnectionState.Open)
{
conn.Open();//打开连接
}
return conn;
}
catch (Exception e)
{
e.Message.ToString();
}
return conn;
}
}
}
各位朋友,发飙吧!

沉了。。。。。
相关推荐
C#连接Oracle数据库字符串 C#连接Oracle数据库字符串
C#连接Oracle数据库(查询数据)方法,好东西,分享一下
总结,C#连接Oracle数据库涉及的主要知识点包括:安装Oracle数据提供程序,使用`OracleConnection`建立连接,通过`OracleCommand`执行SQL,使用`OracleTransaction`管理事务,以及参数化查询和异常处理等。...
本篇将详细讲解如何使用C#通过Oracle.ManagedDataAccess库实现与Oracle数据库的连接,无需在本地安装完整的Oracle数据库。 首先,Oracle.ManagedDataAccess是Oracle公司提供的一个纯.NET框架的客户端驱动,它允许...
标题 "C#连接Oracle11g无需安装客户端" 指出了一种技术方案,它允许C#开发者在不安装Oracle客户端的情况下,也能与Oracle 11g数据库进行交互。这种做法大大简化了开发环境的配置,提高了开发效率,尤其对于那些在多...
C#连接oracle数据库的源代码
在这个"**c#连接oracledemo**"项目中,我们将探讨如何使用C#连接到Oracle 11g数据库,以及一些相关的知识点。 首先,要进行C#连接Oracle,你需要在开发环境中安装Oracle的客户端组件。Oracle提供了一个名为ODP.NET...
在C#编程环境中,Oracle数据库的连接和操作通常需要通过ADO.NET或者其他第三方库来实现。在本场景中,我们关注的是一个名为"C#中oracle连接数据库的封装类"的主题,这个主题涉及到创建一个名为`DbHelperOra.cs`的类...
当需要与Oracle数据库进行交互时,可以借助Oracle提供的Oracle Managed Data Access (ODP.NET Managed Driver)库,该库使得C#程序员能够轻松地连接到Oracle数据库并执行查询、更新等操作。本实例将详细介绍如何使用...
本篇文章将深入探讨如何使用C#连接Oracle数据库以及执行基本的数据操作。由于描述中提到这适用于初学者,我们将从基础知识开始讲解,并且不涉及高级或优化的技巧。 首先,你需要安装Oracle的数据提供者,即Oracle ...
本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...
本文将深入探讨如何使用C#连接Oracle数据库并进行基本的增删改查操作。通过提供的OracleTest增删改查项目源码,我们可以直观地了解这一过程。 首先,连接Oracle数据库需要Oracle的客户端驱动,例如ODP.NET(Oracle ...
自定义数据库连接池还可以考虑支持多种数据库类型,例如SQL Server、MySQL、Oracle等,通过泛型或接口实现对不同数据库的适配。 理解并掌握C#高效数据库连接池的实现,对于开发高性能的数据库应用至关重要。通过...
本篇文章将深入探讨如何使用C#连接Oracle10g、11g及12g数据库,特别是如何利用提供的"Oracle.ManagedDataAccess.dll"库,这是一个64位和32位通用的版本。 Oracle.ManagedDataAccess.dll是Oracle公司为.NET ...
在C#中与Oracle数据库...总的来说,C#连接Oracle数据库涉及到安装必要的驱动,构建正确的连接字符串,以及使用ADO.NET组件进行数据操作。理解这些基本概念和方法,将帮助你在实际项目中顺利地与Oracle数据库进行通信。
数据库连接池是数据库管理中的一个重要概念,它在C#编程中扮演着优化数据库操作的关键角色。C#数据库连接池是一种管理数据库连接的技术,通过复用已存在的连接而不是每次请求时都创建新的连接,从而提高数据库操作的...
### C#连接Oracle数据库的六种方式 在开发过程中,我们常常需要将C#应用程序与Oracle数据库进行连接,以便执行数据读写等操作。本文将详细介绍C#连接Oracle的六种常见方法,并对每种方法的特点及适用场景进行分析。...
本项目“C#成功连接Oracle数据库工程”旨在详细介绍如何利用C#进行Oracle数据库的连接和操作。 首先,要实现C#与Oracle的连接,你需要安装Oracle的数据提供程序,也称为ODP.NET(Oracle Data Provider for .NET)。...
C#连接Oracle数据库执行简单的增删改查操作 C#连接Oracle数据库执行简单的增删改查操作是指使用C#语言连接Oracle数据库,并执行基本的数据操作,如增删改查。下面是对该操作的详细解释: 一、连接Oracle数据库 要...
C#连接Oracle的快速方法,使用Oracle.ManagedDataAccess的综合教程,全开源 1)直接输入Oracle数据库IP\用户名、密码等信息,就可以连接数据库 2)已经写好了一个操作类OracleHelper,可以非常方便的操作数据库返回...