首页 > 代码库 > 一个关于多线程和DbHelper的问题
一个关于多线程和DbHelper的问题
我的初衷是这样的:在多线程环境下,每个数据库编号对应一个DbHelper对象。
下面是代码,不知道这样写有什么问题。
1 namespace TestDAL 2 { 3 public class DB 4 { 5 private static string[] ConnString = new[] 6 { 7 "unknown", "Data Source=163.163.1.100;Initial Catalog=xiaomi;User Id=sa;Password=1234567890;", 8 "Data Source=163.163.1.101;Initial Catalog=xiaomi;User Id=sa;Password=1234567890;" 9 };10 private static readonly ConcurrentDictionary<int, DbHelperSQLP> concurentDictionary;11 static DB()12 {13 concurentDictionary = new ConcurrentDictionary<int, DbHelperSQLP>();14 }15 private DB()16 {17 }18 public static DbHelperSQLP GetDBHelper(int id)19 {20 if (!concurentDictionary.ContainsKey(id))21 concurentDictionary.TryAdd(id, new DbHelperSQLP(ConnString[id]));22 DbHelperSQLP db;23 bool result = concurentDictionary.TryGetValue(id, out db);24 return result ? db : null;25 }26 }27 }
调用方法是:
1 /// <summary> 2 /// 得到一个对象实体 3 /// </summary> 4 public xiaomi GetModel(int dbno, int id) 5 { 6 StringBuilder strSql = new StringBuilder(); 7 strSql.Append("select top 1 id,username,password,email,ip from xiaomi "); 8 strSql.Append(" where id=@id"); 9 SqlParameter[] parameters = {10 new SqlParameter("@id", SqlDbType.Int,4)11 };12 parameters[0].Value =http://www.mamicode.com/ id;13 DbHelperSQLP helper = DB.GetDBHelper(dbno);14 if (helper == null)15 throw new SqlNullValueException("没有找到数据库地址");16 DataSet ds = helper.Query(strSql.ToString(), parameters);17 return ds.Tables[0].Rows.Count > 0 ? DataRowToModel(ds.Tables[0].Rows[0]) : null;18 }
一个关于多线程和DbHelper的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。