/// <summary> /// 新增数据 /// </summary> /// <param name="userInfo">使用者</param> /// <param name="entity">实体</param> /// <param name="statusMessage">返回状态信息</param> /// <returns>受影响的行数</returns> public int Add(UserInfo userInfo, CiItemDetailsEntity entity, out string statusMessage) { int returnValue = 0; statusMessage = string.Empty; if (this.GetDTByValues(userInfo, new string[] { CiItemDetailsTable.FieldItemId, CiItemDetailsTable.FieldItemName, CiItemDetailsTable.FieldDeleteMark }, new string[] { entity.ItemId.ToString(), entity.ItemName, "0" }).Rows.Count > 0) { returnValue = 0; statusMessage = "已存在相同的明细项!"; } else { using (IDbProvider dbProvider = DbFactoryProvider.GetProvider(SystemInfo.RDIFrameworkDbType)) { try { dbProvider.Open(RDIFrameworkDbConection); var manager = new CiItemDetailsManager(dbProvider, userInfo); returnValue = !string.IsNullOrEmpty(manager.AddEntity(entity)) ?1:0; statusMessage = "成功新增数据!"; } catch (Exception ex) { CiExceptionManager.LogException(dbProvider, userInfo, ex); throw ex; } finally { dbProvider.Close(); } } } return(returnValue); }
/// <summary> /// 从数据库中读取文件 /// </summary> /// <param name="id">文件主键</param> /// <returns>文件</returns> public byte[] Download(string id) { // 阅读次数要加一 this.UpdateReadCount(id); // 下载文件 byte[] fileContent = null; var sqlQuery = " SELECT " + CiFileTable.FieldFileContent + " FROM " + CiFileTable.TableName + " WHERE " + CiFileTable.FieldId + " = " + DBProvider.GetParameter(CiFileTable.FieldId); IDataReader dataReader = null; try { dataReader = DBProvider.ExecuteReader(sqlQuery, new IDbDataParameter[] { DBProvider.MakeParameter(CiFileTable.FieldId, id) }); if (dataReader.Read()) { fileContent = (byte[])dataReader[CiFileTable.FieldFileContent]; } } catch (System.Exception ex) { // 在本地记录异常 CiExceptionManager.LogException(DBProvider, UserInfo, ex); } finally { if (dataReader != null) { dataReader.Close(); } } return(fileContent); }
public static void ProcessRDIWriteDbWithLock(UserInfo userInfo, ParameterUtil parameter, object locker, ProcessFunWithLockDelegate fun) { if (SystemInfo.IsAuthorized(userInfo)) { int milliStart = Begin(parameter.UserInfo, parameter.CurrentMethod); bool getOnLine = false; lock (locker) { using (IDbProvider dbProvider = DbFactoryProvider.GetProvider(GetDbType(DbType.RDIDbWrite))) { try { dbProvider.Open(GetDbConnection(DbType.RDIDbWrite)); getOnLine = fun(dbProvider, getOnLine); AddLog(dbProvider, parameter); } catch (Exception ex) { CiExceptionManager.LogException(dbProvider, parameter.UserInfo, ex); throw; } finally { dbProvider.Close(); } } } End(milliStart, parameter.CurrentMethod, getOnLine); } }
private static void ProcessDbProvider(ParameterUtil sup, ProcessFunDelegate fun, DbType dbType, bool inTransaction) { using (IDbProvider dbProvider = DbFactoryProvider.GetProvider(GetDbType(dbType))) { try { dbProvider.Open(GetDbConnection(dbType)); if (inTransaction) { dbProvider.BeginTransaction(); } fun(dbProvider); AddLog(dbProvider, sup); if (inTransaction) { dbProvider.CommitTransaction(); } } catch (Exception ex) { if (inTransaction) { dbProvider.RollbackTransaction(); } CiExceptionManager.LogException(dbProvider, sup.UserInfo, ex); throw; } finally { dbProvider.Close(); } } }
/// <summary> /// 全部清除异常 /// </summary> /// <param name="userInfo">用户</param> /// <returns>数据表</returns> public void Truncate(UserInfo userInfo) { var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.ExceptionService_Truncate); ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider => { var exceptionManager = new CiExceptionManager(dbProvider, userInfo); exceptionManager.Truncate(); }); }
/// <summary> /// 批量删除数据 /// </summary> /// <param name="userInfo">使用者</param> /// <param name="ids">主键数组</param> /// <returns>影响行数</returns> public int BatchDelete(UserInfo userInfo, string[] ids) { int returnValue = 0; var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.ExceptionService_BatchDelete); ServiceUtil.ProcessRDIWriteDbWithTran(userInfo, parameter, dbProvider => { var manager = new CiExceptionManager(dbProvider, userInfo); returnValue = manager.Delete(ids); }); return(returnValue); }
/// <summary> /// 取得列表 /// </summary> /// <param name="userInfo">使用者</param> /// <returns>資料表</returns> public DataTable GetDT(UserInfo userInfo) { var dataTable = new DataTable(CiExceptionTable.TableName); var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.ExceptionService_GetDT); ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider => { var manager = new CiExceptionManager(dbProvider, userInfo); dataTable = manager.GetDT(); dataTable.TableName = CiExceptionTable.TableName; }); return(dataTable); }
/// <summary> /// 获取实体 /// </summary> /// <param name="userInfo">用户</param> /// <param name="id">主键</param> /// <returns>实体</returns> public CiExceptionEntity GetEntity(UserInfo userInfo, string id) { CiExceptionEntity entity = null; var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, string.Empty); ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider => { var manager = new CiExceptionManager(dbProvider, userInfo); entity = manager.GetEntity(id); }); return(entity); }
/// <summary> /// 获取系统异常分页列表 /// </summary> /// <param name="userInfo">用户</param> /// <param name="recordCount">记录总数</param> /// <param name="pageIndex">当前页</param> /// <param name="pageSize">分页大小(默认20条)</param> /// <param name="whereConditional">条件表达式</param> /// <param name="order">排序字段</param> /// <returns>数据表</returns> public DataTable GetDTByPage(UserInfo userInfo, out int recordCount, int pageIndex = 1, int pageSize = 20, string whereConditional = "", string order = "") { var dataTable = new DataTable(CiExceptionTable.TableName); var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, RDIFrameworkMessage.ExceptionService_GetDTByPage); int returnRecordCount = 0; ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider => { var manager = new CiExceptionManager(dbProvider, userInfo); dataTable = manager.GetDTByPage(out returnRecordCount, pageIndex, pageSize, whereConditional, order); dataTable.TableName = CiExceptionTable.TableName; }); recordCount = returnRecordCount; return(dataTable); }
/// <summary> /// 按条件获取数据列表 /// </summary> /// <param name="userInfo">用户</param> /// <param name="names">字段</param> /// <param name="values">值</param> /// <returns>数据表</returns> public DataTable GetDTByValues(UserInfo userInfo, string[] names, object[] values) { var dataTable = new DataTable(CiExceptionTable.TableName); var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, string.Empty); parameter.IsAddLog = false; ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider => { var manager = new CiExceptionManager(dbProvider, userInfo); dataTable = manager.GetDT(names, values); dataTable.TableName = CiExceptionTable.TableName; }); return(dataTable); }
/// <summary> /// 添加异常数据 /// </summary> /// <param name="userInfo">用户</param> /// <param name="entity">实体</param> /// <param name="statusCode">返回状态码</param> /// <param name="statusMessage">返回状态信息</param> /// <returns>主键</returns> public string Add(UserInfo userInfo, CiExceptionEntity entity, out string statusCode, out string statusMessage) { string returnValue = string.Empty; string returnCode = string.Empty; string returnMessage = string.Empty; var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, string.Empty); ServiceUtil.ProcessRDIReadDb(userInfo, parameter, dbProvider => { var manager = new CiExceptionManager(dbProvider, userInfo); returnValue = manager.AddEntity(entity); returnMessage = manager.GetStateMessage(returnCode); }); statusCode = returnCode; statusMessage = returnMessage; return(returnValue); }
/// <summary> /// 更新实体 /// </summary> /// <param name="userInfo">使用者</param> /// <param name="entity">实体</param> /// <param name="statusMessage">返回状态信息</param> /// <returns>影响行数</returns> public int Update(UserInfo userInfo, CiItemDetailsEntity entity, out string statusMessage) { int returnValue = 0; statusMessage = string.Empty; using (IDbProvider dbProvider = DbFactoryProvider.GetProvider(SystemInfo.RDIFrameworkDbType)) { try { dbProvider.Open(RDIFrameworkDbConection); var manager = new CiItemDetailsManager(dbProvider, userInfo); if (manager.IsExisted(entity)) { returnValue = 0; statusMessage = "已存在相同的明细项!"; } else { returnValue = manager.UpdateEntity(entity); statusMessage = "修改数据成功!"; } } catch (Exception ex) { CiExceptionManager.LogException(dbProvider, userInfo, ex); throw ex; } finally { dbProvider.Close(); } } return(returnValue); }
/// <summary> /// 记录异常情况 /// </summary> /// <param name="dbProvider">数据库连接</param> /// <param name="userInfo">用户</param> /// <param name="ex">异常</param> /// <returns>受影响的行数</returns> public static int LogException(IDbProvider dbProvider, UserInfo userInfo, Exception ex) { // 在控制台需要输出错误信息 Console.ForegroundColor = ConsoleColor.Red; Console.Write(ex.InnerException); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(string.Empty); var returnValue = 0; // 系统里应该可以配置是否记录异常现象 if (!SystemInfo.LogException) { return(returnValue); } // Windows系统异常中 if (SystemInfo.EventLog) { if (!System.Diagnostics.EventLog.SourceExists(SystemInfo.SoftName)) { System.Diagnostics.EventLog.CreateEventSource(SystemInfo.SoftName, SystemInfo.SoftFullName); } var eventLog = new System.Diagnostics.EventLog(); eventLog.Source = SystemInfo.SoftName; eventLog.WriteEntry(ex.Message, EventLogEntryType.Error); } // 判断一下数据库是否打开状态,若数据库都没能打开,还记录啥错误,不是又抛出另一个错误了? if (dbProvider != null && dbProvider.GetDbConnection() != null) { if (dbProvider.GetDbConnection().State == ConnectionState.Open) { var exceptionManager = new CiExceptionManager(dbProvider, userInfo); returnValue = exceptionManager.AddEntity(ex); } } return(returnValue); }