C#.NET 权限管理系统组件 - 大数据只获取更新部分数据列的标准例子

简介:

程序的运行效果如下:

1:获取时,只获取需要的列,不需要的列不获取,主要原因是:因为数据量大获取所有的列传输的数据量大,有些敏感数据未必需要都传输在网络上,其次是更新数据时的版本问题尽量避免,你也在改他也在改,隐藏的数据列也更新了,并不是很好甚至可能引起一些没必要的错误。

 

        #region public DataTable GetAddressDataTableByPage(BaseUserInfo userInfo, string organizeId, string searchValue, out int recordCount, int pageIndex = 0, int pageSize = 100, string sort = null)
        /// <summary>
        /// 获取内部通讯录         /// </summary>
        /// <param name="userInfo">用户</param>
        /// <param name="organizeId">组织机构主键</param>
        /// <param name="search">查询内容</param>
        /// <param name="pageSize">分页的条数</param>
        /// <param name="pageIndex">当前页数</param>
        /// <returns>数据表</returns>
        public DataTable GetAddressDataTableByPage(BaseUserInfo userInfo, string organizeId, string searchValue, out int recordCount, int pageIndex = 0, int pageSize = 100, string sort = null)         {             // 写入调试信息
            #if (DEBUG)
                int milliStart = BaseBusinessLogic.StartDebug(userInfo, MethodBase.GetCurrentMethod());             #endif

            // 加强安全验证防止未授权匿名调用
            #if (!DEBUG)                 LogOnService.UserIsLogOn(userInfo);             #endif              DataTable dataTable = new DataTable(BaseStaffEntity.TableName);             using (IDbHelper dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType))             {                 try                 {                     dbHelper.Open(UserCenterDbConnection);                     // 这里是不获取所有的列,只获取自己需要的列的标准方法
                    BaseStaffManager staffManager = new BaseStaffManager(dbHelper, userInfo);                     staffManager.SelectField = "Id, RealName, DepartmentName, DutyName, OfficePhone, Mobile, ShortNumber, Email, OICQ, Description";                     dataTable = staffManager.GetAddressDataTableByPage(organizeId, searchValue, out recordCount, pageSize, pageIndex, sort);                     dataTable.TableName = BaseStaffEntity.TableName;                     BaseLogManager.Instance.Add(dbHelper, userInfo, this.serviceName, AppMessage.StaffService_GetAddressPageDT, MethodBase.GetCurrentMethod());                 }                 catch (Exception ex)                 {                     BaseExceptionManager.LogException(dbHelper, userInfo, ex);                     throw;                 }                 finally                 {                     dbHelper.Close();                 }             }              // 写入调试信息
            #if (DEBUG)                 BaseBusinessLogic.EndDebug(MethodBase.GetCurrentMethod(), milliStart);             #endif
            return dataTable;         }         #endregion

2:更新时,只更新数据有变化的记录,没有变化的记录不进行更新。

        #region private void BatchSave() 批量保存
        /// <summary>
        /// 批量保存         /// </summary>
        private void BatchSave()         {             // 去掉未修改的数据,提高运行速度
            for (int i = this.DTStaff.Rows.Count - 1; i >= 0; i--)             {                 if (this.DTStaff.Rows[i].RowState == DataRowState.Unchanged)                 {                     this.DTStaff.Rows.RemoveAt(i);                 }             }             DotNetService.Instance.StaffService.BatchUpdateAddress(this.UserInfo, this.DTStaff);             this.Search();             if (BaseSystemInfo.ShowInformation)             {                 // 批量保存,进行提示
                MessageBox.Show(AppMessage.MSG0012, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);             }         }         #endregion

 

        /// <summary>
        /// 批量更新通讯地址         /// </summary>
        /// <param name="userInfo">用户</param>
        /// <param name="dtStaff">数据表</param>
        /// <returns>影响行数</returns>
        public int BatchUpdateAddress(BaseUserInfo userInfo, DataTable dtStaff)         {             // 写入调试信息
            #if (DEBUG)
                int milliStart = BaseBusinessLogic.StartDebug(userInfo, MethodBase.GetCurrentMethod());             #endif

            // 加强安全验证防止未授权匿名调用
            #if (!DEBUG)                 LogOnService.UserIsLogOn(userInfo);             #endif

            int returnValue = 0;             using (IDbHelper dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType))             {                 try                 {                     dbHelper.Open(UserCenterDbConnection);                     // 这里是只更新部分字段的例子
                    foreach (DataRow dr in dtStaff.Rows)                     {                         SQLBuilder sqlBuilder = new SQLBuilder(dbHelper);                         sqlBuilder.BeginUpdate(BaseStaffEntity.TableName);                         // 这里是界面上显示的字段,需要更新的字段
                        sqlBuilder.SetValue(BaseStaffEntity.FieldOfficePhone, dr[BaseStaffEntity.FieldOfficePhone].ToString());                         sqlBuilder.SetValue(BaseStaffEntity.FieldMobile, dr[BaseStaffEntity.FieldMobile].ToString());                         sqlBuilder.SetValue(BaseStaffEntity.FieldShortNumber, dr[BaseStaffEntity.FieldShortNumber].ToString());                         sqlBuilder.SetValue(BaseStaffEntity.FieldEmail, dr[BaseStaffEntity.FieldEmail].ToString());                         sqlBuilder.SetValue(BaseStaffEntity.FieldOICQ, dr[BaseStaffEntity.FieldOICQ].ToString());                         sqlBuilder.SetValue(BaseStaffEntity.FieldDescription, dr[BaseStaffEntity.FieldDescription].ToString());                         sqlBuilder.SetWhere(BaseStaffEntity.FieldId, dr[BaseStaffEntity.FieldId].ToString());                         returnValue += sqlBuilder.EndUpdate();                     }                     BaseLogManager.Instance.Add(dbHelper, userInfo, this.serviceName, AppMessage.StaffService_BatchUpdateAddress, MethodBase.GetCurrentMethod());                 }                 catch (Exception ex)                 {                     BaseExceptionManager.LogException(dbHelper, userInfo, ex);                     throw;                 }                 finally                 {                     dbHelper.Close();                 }             }              // 写入调试信息
            #if (DEBUG)                 BaseBusinessLogic.EndDebug(MethodBase.GetCurrentMethod(), milliStart);             #endif

            return returnValue;         }

希望能对需要的人起点儿参考作用。




本文转自 jirigala 51CTO博客,原文链接:http://blog.51cto.com/2347979/1188404,如需转载请自行联系原作者

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
|
5月前
|
前端开发 JavaScript 关系型数据库
使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
198 0
|
8月前
|
网络协议 定位技术 网络安全
IPIP.NET-IP地理位置数据
IPIP.NET 是一家专注于 IP 地理位置数据的提供商,基于 BGP/ASN 数据与全球 800+ 网络监测点技术,提供高精度的 IPv4 和 IPv6 定位服务。其核心服务包括地理位置查询、详细地理信息和网络工具等,广泛应用于网络安全、广告营销、CDN 优化等领域。数据覆盖全球,支持多语言,每日更新确保实时性。IPIP.NET 提供 API 接口、离线数据库及多种语言 SDK,方便开发者集成使用。
1555 0
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
339 2
|
SQL 缓存 大数据
C#高效处理大数据的批次处理,以及最好的数据库设计
C#高效处理大数据的批次处理,以及最好的数据库设计
538 0
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
242 1
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
前端开发 数据安全/隐私保护 UED
.NET 8 通用权限框架 前后端分离,开箱即用
【8月更文挑战第1天】基于.NET 8 的通用权限框架,采用前后端分离设计,实现真正的开箱即用!无需繁琐配置,一键启动权限管理新体验。利用.NET 8 的高性能与稳定性,结合灵活的前后端开发模式,显著提升开发效率,缩短项目周期。无论大小项目,皆能轻松应对,立即体验高效开发的新篇章!
268 1
|
开发框架 JSON 前端开发
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理