那些 Cynthia 教我的事 之 PMSec (二)
一、在Foreach之前要判断是否为空。
常常从数据库里取出来表就直接用了,很少记得判断是否有值。不严谨的说。
专业人员写的是酱滴。。。
DataLayer.PMSecDataSet.PMSECRequestDataTable requestDataTable = adapter.up_PMSec_PMSECRequestSelectByMasterIDs(masterIds);
if (requestDataTable != null && requestDataTable.Count > )
{
...
}
二、当数据库中允许为空。
话说,上次已经说过的啦。。。但是这次更加明确,要用Nullable<int>.
Nullable<int> intNull = null;
DataLayer.PMSecDataSet.PMSECRequestDataTable requestDataTable = adapter.up_PMSec_PMSECRequestSelectByMasterIDs(masterIds); if (requestDataTable != null && requestDataTable.Count > )
{ foreach (DataLayer.PMSecDataSet.PMSECRequestRow dr in requestDataTable.Rows)
{
PMSecRequestInfo requestInfo = new PMSecRequestInfo();
requestInfo.RequestMasterID = dr.RequestMasterID;
requestInfo.EmployeeID = dr.EmployeeID;
Employee requestEmployee = new Employee(dr.EmployeeID);
requestInfo.DisplayName = requestEmployee.DisplayName;
requestInfo.StatusType = dr.StatusType;
requestInfo.CompanyID = dr.CompanyID;
requestInfo.WorkStoreID = dr.WorkStoreID;
requestInfo.JobCode = dr.JobCode;
requestInfo.RequestedSecurityLevel = dr.IsRequestedSecurityLevelNull() ? intNull : dr.RequestedSecurityLevel;
requestInfo.IsSecurityAdmin = dr.IsSecurityAdmin;
requestInfo.CreatedBy = dr.CreatedBy;
requestInfo.CreatedOn = dr.CreatedOn; requestInfoList.Add(requestInfo);
}
}
string类无需此处理。
三、操作数据库时
当含有update等更改数据库内容的语句存在时,如果下面操作仍与数据库有关,考虑到程序的扩展性,可能出现上述语句删除了某些数据,下面语句出现异常,或者产生错误结果,等等。
譬如下面两段代码,前者是我的做法,后者为Cynthia的做法,一见高下啊啊啊。我写的好像是舒克和贝塔里那只笨猫,喵,~~~~(>_<)~~~~ 。
public void ApporveOrDeclineRequest(string masterIds, string statusType, int loginEid)
{
PMSECRequestPendingTaskTableAdapter adapter = new PMSECRequestPendingTaskTableAdapter();
adapter.up_PMSec_PMSECRequestUpdate(masterIds, statusType, loginEid); // Send Email
PandaRG.Common.OrgChart.Employee logInEmployee = new Common.OrgChart.Employee(loginEid); if (statusType == RequestStatusType.APPROVED.ToString())
{
EmailSendHelper.SentEmailbyEmailType(RequestStatusType.APPROVED, GetRequestInfoListByRequestMasterIds(masterIds), logInEmployee); }
else if(statusType==RequestStatusType.DECLINED.ToString())
{
EmailSendHelper.SentEmailbyEmailType(RequestStatusType.DECLINED, GetRequestInfoListByRequestMasterIds(masterIds), logInEmployee);
}
}
public void UpdatePMSECRequest(string masterIds, RequestStatusType statusType, Employee loginEmployee)
{
PMSECRequestPendingTaskTableAdapter adapter = new PMSECRequestPendingTaskTableAdapter(); List<PMSecRequestInfo> requestInfoList = GetRequestInfoListByRequestMasterIds(masterIds);
adapter.up_PMSec_PMSECRequestUpdate(masterIds, statusType.ToString(), loginEmployee.EmployeeId);
EmailSendHelper.SentEmailbyEmailType(statusType, requestInfoList, loginEmployee);
}
四、 λ 表达式
好复杂的说,不老明白的,计入λ 番外篇吧。
( ^_^ )/~~
那些 Cynthia 教我的事 之 PMSec (二)的更多相关文章
- 那些 Cynthia 教我的事 之 PMSec (三)
在项目中,聪明的Jenny童鞋提了一个suggestion,即将同一个店同一人提交的请求,经过上级批准之后,邮件内容需要合并. 非常滴合理有木有~~ 提交十个申请,将收到十封邮件,的确不友好哦.可是由 ...
- 那些 Cynthia 教我的事 之 PMSec (一)
一.ViewState的使用 在项目中,我一直在用Common的方法读取一些信息,但是Cynthia习惯将它存入ViewState中. ViewState 它是由ASP.NET页面框架管理的一个隐藏的 ...
- Docker最全教程之MySQL容器化 (二十四)
前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过此块,本篇仅从笔者角度进行总结和编写. 目录 镜像说明 运行MySQL容器镜像 1.运行MySQL容器 ...
- Android开发之手把手教你写ButterKnife框架(二)
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52664112 本文出自:[余志强的博客] 上一篇博客Android开 ...
- 3D单机游戏《天鹰教》源码发布(二)
3D单机游戏<天鹰教>源码发布 作者 作者: 游蓝海 博客: http://blog.csdn.net/you_lan_hai mail: you_lan_hai@foxmail. ...
- 手把手教你用Pytorch-Transformers——实战(二)
本文是<手把手教你用Pytorch-Transformers>的第二篇,主要讲实战 手把手教你用Pytorch-Transformers——部分源码解读及相关说明(一) 使用 PyTorc ...
- 手把手教你全家桶之React(二)
前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用. 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新.并而不 ...
- Docker最全教程之Python爬网实战(二十一)
Python目前是流行度增长最快的主流编程语言,也是第二大最受开发者喜爱的语言(参考Stack Overflow 2019开发者调查报告发布).笔者建议.NET.Java开发人员可以将Python发展 ...
- Opencv2教程一:图像变换之阈值二值threshold
网名:无名 QQ:16349023 email:mengwzy@qq.com 曾经非常少写教程,写的可能有点乱希望大对家有帮助 threshold 方法是通过遍历灰度图中点.将图像信息二值化,处理 ...
随机推荐
- WebApi官网学习记录---web api中的路由
如果一条路由匹配,WebAPI选择controller和action通过如下方式: 1.找到controller,将"controller"赋值给{controller}变量 2. ...
- 你所不了解的css选择器补充
div p和div>p的区别 1.div p选择 <div> 元素内部的所有 <p> 元素 2.div>p选择父元素为 <div> 元素的所有 < ...
- css链接,列表,表格
1.css链接 a:link - 正常,未访问过的链接 a:visited - 用户已访问过的链接 a:hover - 当用户鼠标放在链接上时 a:active - 链接被点击的那一刻 注意: a:h ...
- jdk内存
- (转) c++ 迭代器
原地址:http://www.cnblogs.com/marchtea/archive/2012/02/27/2370068.html 前言: 以下的内容为我阅读c++沉思录18,19,20章的笔记以 ...
- zongjie
$msg = $_GET['msg'];$startDate = $_POST['startDate'];$endDate = $_POST['endDate'];$quickdate = $_POS ...
- python-整理--pip whl命令
如果要在windows系统上安装新的包,可以下载*.exe安装文件,双击下一步...,如果找不到exe的话. 在CMD中执行 pip install 安装包文件.whl 就可以安装了 pip这个命令本 ...
- css样式书写顺序
这里推荐先写显示属性,再写自身属性,再写文字属性:并不代表非得按这个顺序写,但这种写法可以使css结构更清晰易读,修改起来比较方便. 而且在团队项目中能更好地提高效率. //显示属性 display ...
- flash播放器遮挡页面中元素问题解决
今天在做一个包含Flash播放器的页面弹出效果时发现Flash播放器总是跑到页面最上层,发现这个问题与Flash的”wmode”属性有关,至于该元素详细此处不做记录,解决办法如下: IE:加入参数:& ...
- Python学习笔记(1)——数组差集
面试的时候被问到这样一个问题:有A.B两个数组,找出B中有A中没有的所有元素(换言之即是求差集B-A).当时比较紧张,用了最原始的双重嵌套循环逐个比较,很显然这种时间复杂度高达O(n2)的算法相当lo ...