public void AddTest() { for (int i = 0; i < 10; i++) { DBLogEntity entity = new DBLogEntity(); entity.tabName = "tbUser"; entity.tId = "1"; entity.lType = 2; entity.sql = ""; entity.paras = ""; entity.ms = 10; entity.uId = "user" + (i + 1); entity.ctime = DateTime.Now; dbService.Add <DBLogEntity>("YMOA", "DBLog", entity); } }
/// <summary> /// 执行DB操作 /// </summary> /// <typeparam name="T">返回类型</typeparam> /// <param name="p">当前执行方法</param> /// <param name="entity">数据库操作日志</param> /// <returns></returns> private T InvokeMethodWithDB <T>(Func <T> p, DBLogEntity entity) { T retObj = default(T); Stopwatch sw = new Stopwatch(); sw.Start(); retObj = p(); sw.Stop(); entity.ms = sw.ElapsedMilliseconds; entity.uId = HttpContext.Current.Session["UserId"].ToString(); entity.ctime = DateTime.Now; Task.Factory.StartNew(() => { new MongoDbService().Add <DBLogEntity>(ConfigurationManager.AppSettings["MongoDb_Name"], MongoDBCollection, entity); }); return(retObj); }
/// <summary> /// 执行标准单表Insert&Update操作 /// </summary> /// <param name="connectionString"></param> /// <param name="tabName">表名</param> /// <param name="paras">参数</param> /// <param name="keyFild">主键字段</param> /// <returns></returns> protected int StandardInsertOrUpdate(string tabName, Dictionary <string, object> paras, string keyFild = "ID", bool needLog = false, OperateType operateType = OperateType.None) { var fields = GetFieldsFromDictionary(paras, keyFild); var sql = ""; if (paras[keyFild].ToString().Equals("0")) { var fieldsSql1 = String.Join(",", fields); var fieldsSql2 = String.Join(",", fields.Select(field => "@" + field)); sql = String.Format("INSERT {0} ({1}) VALUES ({2});", tabName, fieldsSql1, fieldsSql2); } else { var fieldsSql = String.Join(",", fields.Select(field => field + " = @" + field)); sql = String.Format("UPDATE {0} SET {1} WHERE {2} = @{2}", tabName, fieldsSql, keyFild); } using (IDbConnection dbConnection = GetConnection()) { if (needLog) { DBLogEntity entity = new DBLogEntity(); entity.tabName = tabName; entity.tId = paras[keyFild].ToString(); entity.lType = (int)operateType; entity.sql = sql; entity.paras = paras.ToJson(); return(InvokeMethodWithDB <int>(() => { int i = dbConnection.Execute(sql, paras); if (entity.tId.Equals("0")) { //获得刚新增的ID entity.tId = dbConnection.QueryFirst <string>(string.Format("SELECT MAX({0}) FROM {1}", keyFild, tabName)); } return i; }, entity)); } else { return(dbConnection.Execute(sql, paras)); } } }
/// <summary> /// 执行标准单表Insert&Update操作 /// </summary> /// <param name="connectionString"></param> /// <param name="tabName">表名</param> /// <param name="paras">参数</param> /// <param name="keyFild">主键字段</param> /// <returns></returns> private int StandardInsertOrUpdate(string sql, string tabName, Dictionary <string, object> paras, string keyFild, bool needLog, OperateType operateType) { using (IDbConnection dbConnection = GetConnection()) { if (needLog) { DBLogEntity entity = new DBLogEntity(); entity.tabName = tabName; entity.tId = paras[keyFild].ToString(); entity.lType = (int)operateType; entity.sql = sql; entity.paras = paras.ToJson(); return(InvokeMethodWithDB <int>(() => { int i = dbConnection.Execute(sql, paras); return i; }, entity)); } else { return(dbConnection.Execute(sql, paras)); } } }
/// <summary> /// 查询单笔 /// </summary> /// <typeparam name="T">返回类型</typeparam> /// <param name="sql"></param> /// <param name="param">参数</param> /// <param name="commandType">SQL命令类型</param> /// <param name="logEntity">DBLog</param> /// <returns></returns> protected T QuerySingle <T>(string sql, object param = null, CommandType commandType = CommandType.Text, DBLogEntity logEntity = null) { if (logEntity == null) { return(_QuerySingle <T>(sql, param, commandType)); } else { return(InvokeMethodWithDB <T>(() => { var r = _QuerySingle <T>(sql, param, commandType); if (!string.IsNullOrEmpty(logEntity._id) && logEntity._id != "0") { using (IDbConnection conn = GetConnection()) //获得刚新增的ID logEntity.tId = conn.QueryFirst <string>(string.Format("SELECT MAX({0}) FROM {1}", "ID", logEntity.tabName)); } return r; }, logEntity)); } }