using System; using System.Collections.Generic; using System.Text; using System.Data.Sql; using System.Data.SqlClient; using System.Data;namespace ClsC { public class SqConPol { /// <summary> /// 建立数据库连接池 /// </summary> private static List<SqlConnection> CoonPool; /// <summary> /// 定义最大连接数 /// </summary> public static int MaxConCount = 500; //限制最大500 public static int nowConCount = 0;//当前已使用连接的数量
每次新增前,先select count(*) from 这个表,看看返回的记录个数是否超过500.当然了,每次用户断开连接,你要同步更新这张表。
或者把这个状态放到一个xml文件中也行。
using System.Collections.Generic;
using System.Text;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data;namespace ClsC
{
public class SqConPol
{
/// <summary>
/// 建立数据库连接池
/// </summary>
private static List<SqlConnection> CoonPool;
/// <summary>
/// 定义最大连接数
/// </summary> public static int MaxConCount = 500; //限制最大500
public static int nowConCount = 0;//当前已使用连接的数量
public string driverclassname = "";
public string url = "";
public string username = "";
public string password = ""; public SqConPol()
{
CoonPool = new List<SqlConnection>(); }
/// <summary>
/// 获取连接
/// </summary>
/// <returns></returns>
public SqlConnection getConnection()
{
SqlConnection conn = null;
if (CoonPool == null || CoonPool.Count < MaxConCount)
{
if (nowConCount <= MaxConCount)
{
conn = this.createConnection();
CoonPool.Add(conn);
int lastIndex = CoonPool.Count - 1;
conn = CoonPool[lastIndex];
CoonPool.Remove(conn);
}
}
else
{
if (nowConCount == 0)
{
conn = null;
}
else
{
int lastIndex = CoonPool.Count - 1;
conn = CoonPool[lastIndex];
CoonPool.Remove(conn);
}
}
return conn;
}/// <summary>
/// 释放数据库连接
/// </summary>
/// <param name="conn"></param>
public void releaseConnection(SqlConnection conn)
{
if (CoonPool.Count == MaxConCount)
{
try
{
conn.Close();
}
catch (SqlException e)
{
}
}
else
{
CoonPool.Add(conn);
}
}
/// <summary>
/// 创建一个数据库连接
/// </summary>
/// <returns></returns>
private SqlConnection createConnection()
{
SqlConnection conn = new SqlConnection();
try
{ conn.ConnectionString = "Data Source=LRP-PC;;user id=sa;password=sa;Initial Catalog=StoneMD;min pool size=4;max pool size=100;packet size=3072;Connect Timeout=100;";
conn.Open();
nowConCount += 1; }
catch (Exception e)
{ } return conn;
} }
}
我创建了一个这样的dll让系统引用,可好像并不能限制打开500个,请问是不是哪里错了
你这里把这个对象当成是一个公用的。实际情况下不是这样的。当然不行。
目的就是为了,把这个在线的人数给存到长久的对象中。
但是如果他明白这个字段是将数字MD5后存进去的,那完全可以把0MD5后存进去...
不清楚你具体的需求,我觉得还是直接在代码里判断变量比较好
用户登出时,前用户数量-1
(如果仅仅是Client --> DB的架构)如果有中间层,可以将当前用户数量保存在中间层,其他步骤跟上一个方案一致.
sqlserver不会有问题,看机器性能