/// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
 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);
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        /// <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);
        }