那些 Cynthia 教我的事 之 PMSec (二)

本文探讨了在从数据库获取数据前进行空值检查的重要性,使用Nullable类型处理可能的空值,以及在数据库操作后的代码逻辑优化,避免因数据更改导致的后续异常。同时,提到了lambda表达式的应用,尽管未深入讨论,但提示了其复杂性和潜在的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在Foreach之前要判断是否为空。

常常从数据库里取出来表就直接用了,很少记得判断是否有值。不严谨的说。

专业人员写的是酱滴。。。

1           DataLayer.PMSecDataSet.PMSECRequestDataTable requestDataTable = adapter.up_PMSec_PMSECRequestSelectByMasterIDs(masterIds);
2 
3           if (requestDataTable != null && requestDataTable.Count > 0)
4           {
5              ...
6            }

二、当数据库中允许为空。

 话说,上次已经说过的啦。。。但是这次更加明确,要用Nullable<int>.

 1          Nullable<int> intNull = null;
 2           DataLayer.PMSecDataSet.PMSECRequestDataTable requestDataTable = adapter.up_PMSec_PMSECRequestSelectByMasterIDs(masterIds);
 3 
 4           if (requestDataTable != null && requestDataTable.Count > 0)
 5           {
 6 
 7               foreach (DataLayer.PMSecDataSet.PMSECRequestRow dr in requestDataTable.Rows)
 8               {
 9                   PMSecRequestInfo requestInfo = new PMSecRequestInfo();
10                   requestInfo.RequestMasterID = dr.RequestMasterID;
11                   requestInfo.EmployeeID = dr.EmployeeID;
12                   Employee requestEmployee = new Employee(dr.EmployeeID);
13                   requestInfo.DisplayName = requestEmployee.DisplayName;
14                   requestInfo.StatusType = dr.StatusType;
15                   requestInfo.CompanyID = dr.CompanyID;
16                   requestInfo.WorkStoreID = dr.WorkStoreID;
17                   requestInfo.JobCode = dr.JobCode;
18                   requestInfo.RequestedSecurityLevel = dr.IsRequestedSecurityLevelNull() ? intNull : dr.RequestedSecurityLevel;
19                   requestInfo.IsSecurityAdmin = dr.IsSecurityAdmin;
20                   requestInfo.CreatedBy = dr.CreatedBy;
21                   requestInfo.CreatedOn = dr.CreatedOn;
22 
23                   requestInfoList.Add(requestInfo);
24               }
25           }

string类无需此处理。


三、操作数据库时

当含有update等更改数据库内容的语句存在时,如果下面操作仍与数据库有关,考虑到程序的扩展性,可能出现上述语句删除了某些数据,下面语句出现异常,或者产生错误结果,等等。

譬如下面两段代码,前者是我的做法,后者为Cynthia的做法,一见高下啊啊啊。我写的好像是舒克和贝塔里那只笨猫,喵,~~~~(>_<)~~~~ 。

 1   public void ApporveOrDeclineRequest(string masterIds, string statusType, int loginEid)
 2       {
 3            PMSECRequestPendingTaskTableAdapter adapter = new PMSECRequestPendingTaskTableAdapter();
 4            adapter.up_PMSec_PMSECRequestUpdate(masterIds, statusType, loginEid);
 5 
 6           // Send Email
 7            PandaRG.Common.OrgChart.Employee logInEmployee = new Common.OrgChart.Employee(loginEid);
 8 
 9            if (statusType == RequestStatusType.APPROVED.ToString())
10            {
11                EmailSendHelper.SentEmailbyEmailType(RequestStatusType.APPROVED, GetRequestInfoListByRequestMasterIds(masterIds), logInEmployee);
12 
13            }
14            else if(statusType==RequestStatusType.DECLINED.ToString())
15            {
16                EmailSendHelper.SentEmailbyEmailType(RequestStatusType.DECLINED, GetRequestInfoListByRequestMasterIds(masterIds), logInEmployee);
17            }
18       }

 

1       public void UpdatePMSECRequest(string masterIds, RequestStatusType statusType, Employee loginEmployee)
2       {
3           PMSECRequestPendingTaskTableAdapter adapter = new PMSECRequestPendingTaskTableAdapter();
4 
5           List<PMSecRequestInfo> requestInfoList = GetRequestInfoListByRequestMasterIds(masterIds);
6           adapter.up_PMSec_PMSECRequestUpdate(masterIds, statusType.ToString(), loginEmployee.EmployeeId);
7           EmailSendHelper.SentEmailbyEmailType(statusType, requestInfoList, loginEmployee);  
8       }


四、 λ 表达式

好复杂的说,不老明白的,计入λ 番外篇吧。

( ^_^ )/~~

 

转载于:https://www.cnblogs.com/coderinprague/p/4269717.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值