C#关于数据库操作的问题,下面代码启动了两个线程,每个线程循环着进行数据库操作...
答案:2 悬赏:40
解决时间 2021-02-15 05:25
- 提问者网友:心裂忍耐
- 2021-02-14 17:13
C#关于数据库操作的问题,下面代码启动了两个线程,每个线程循环着进行数据库操作...
最佳答案
- 二级知识专家网友:一个很哇塞的汉子
- 2021-02-14 18:34
除了DataReader。还有其他的api会报这个错误的
全部回答
- 1楼网友:寂寞的炫耀
- 2021-02-14 18:58
多线程连接数据库的连接池类: public static class connectionpool { private static object locker = new object(); private static dictionary<string, sqlconnection> connections = null; public static sqlconnection getconnection<t>() where t : class, new() { string databasename = na.common.extensions.getdatabasename<t>(); if (string.isnullorempty(databasename)) return null; if (connections == null) { lock (locker) { connections = new dictionary<string, sqlconnection>(); } } string connkey = findfreesqlconnection(databasename); if (connkey != null) return connections[connkey]; else { string strconn = na.common.extensions.getconnectionstring<t>(); int poolsize = na.common.extensions.getconnectionpoolsize<t>(); lock (locker) { for (int i = 0; i < poolsize; ++i) { sqlconnection conn = new sqlconnection(strconn); conn.open(); connections.add(databasename + "_" + i.tostring(), conn); conn.close(); } } return connections[findfreesqlconnection(databasename)]; } } private static string findfreesqlconnection(string databasename) { ienumerable<string> connkeys = connections.keys.where(item => item.startswith(databasename)); if (connkeys != null && connkeys.count() > 0) { foreach (string key in connkeys) { if (connections[key].state == connectionstate.closed) return key; } } return null; } } 附加上其中用到的三个方法: internal static int getconnectionpoolsize<t>() where t : class, new() { string database = getdatabasename<t>(); string[] poolsizearray = configurationmanager.appsettings["connectionspoolsize"].split('|'); if (poolsizearray != null) { foreach (string sizeitem in poolsizearray) { string[] sizeitemarray = sizeitem.split(':'); if (database == sizeitemarray[0]) return int.parse(sizeitemarray[1]); } } return 50; } public static string getconnectionstring<t>() where t : class, new() { string tablename = gettablename<t>(); string[] databasearray = configurationmanager.appsettings["databasearray"].split('|'); if (databasearray != null) { foreach (string database in databasearray) { string tablenamelist = configurationmanager.appsettings[database]; string[] tables = configurationmanager.appsettings[database].split('|'); if (tables != null && tables.length > 0) if (tables.contains(tablename)) return configurationmanager.connectionstrings[database].connectionstring; } } return string.empty; } public static string getdatabasename<t>() where t : class, new() { string tablename = gettablename<t>(); string[] databasearray = configurationmanager.appsettings["databasearray"].split('|'); if (databasearray != null) { foreach (string database in databasearray) { string tablenamelist = configurationmanager.appsettings[database]; string[] tables = configurationmanager.appsettings[database].split('|'); if (tables != null && tables.length > 0) if (tables.contains(tablename)) return database; } } return string.empty; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯