中易网

C#关于数据库操作的问题,下面代码启动了两个线程,每个线程循环着进行数据库操作...

答案:2  悬赏:40  
解决时间 2021-02-15 05:25
C#关于数据库操作的问题,下面代码启动了两个线程,每个线程循环着进行数据库操作...
最佳答案
除了DataReader。还有其他的api会报这个错误的
全部回答
多线程连接数据库的连接池类: 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; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
贺兰县德源街德盛堂大药房地址在哪,我要去那
90年冬月十四十一点过出生命运怎么样
交通事故中受伤人住院期间的护工费给到什么时
fate zero男主是大叔
沐溪我想知道这个在什么地方
现在有小麦玉米两用型收割机吗?价格多少.什么
扁头手机耳机通用吗谢谢
水利旅店怎么去啊,有知道地址的么
会计中会计科目的编号是怎么编的?
这两电脑配置比哪个更好?
浙西龙井峡漂流6岁小男孩能玩吗?大人小孩一
手机密码有什么作用
我想知道你用体积分数转化为浓度那个方法是根
外地在外地跑有补贴吗?
0215是哪舞城市区号
推荐资讯
Baby、江南style哪个更红?
八岁小孩老是说没意思是什么原因呢?
一克拉钻戒有多大
php在网站后台开发中占比占第几位?
投币摇摇车投不进去硬币是怎么回事?
印象最深刻的一次游玩 作文 八百字
一物体在做匀速圆周运动,画出它的vt图像
春下边两虫子打一成语
广玉兰移栽后叶子枯了,会死吗,应该怎么办?
自然堂、珀莱雅、丸美、圣密莱雅这几个牌子哪
互联网恶意行为发生最多的国家是哪个国家
李某出小说取得稿酬80000元从中拿出20000通过
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?