当前位置: 首页 > news >正文

【开发心得】筑梦上海:项目风云录(16)

目录

代码反面案例

李青与诺基亚的兴衰

并行项目下的利益纠葛与团队协作

未完待续。。。


今天分享的是一个反面案例,也算是一个避坑指南了。

代码反面案例

今天分享的代码是一个反面案例,当时由于项目人员变动频繁,经常是新人看不太懂旧的代码,但是进度又来不及,所以临时想了一个办法,即借新还旧。

具体的操作方法是:旧文件不动,利用类的多态属性,重新写一个新的文件,比如旧文件名是demo.cs,那么新人过来就加一个新的文件名:demoEx.cs。但是不推荐这样的方式,会造成后期维护起来极其的困难!

所以在后来的最终版本中,项目经常出现类似上面命名规则的两个文件。今天的例子是个极端,出现了三个文件,由于demo.cs文件是空的,就不再展示了,具体代码如下:

demoEx.cs文件(代码较多,已做删减处理。。。)

public class CauseTroubleOperatorEx:Traffic.Common.TrafficOperatorEx{#region Update方法//对DATASET设置表间关系public static void SetDataRelation(System.Data.DataSet currentDS){			currentDS=(Traffic.Mechanism.CauseTroubleRules.dsMaterialsAudit)currentDS;DataRelation drl=currentDS.Relations.Add("MaterialsAppraise",currentDS.Tables["MaterialsAuditPrice"].Columns["Id"],currentDS.Tables["AppraiseProject"].Columns["MaterialsAuditPriceID"],true);DataRelation drl2=currentDS.Relations.Add("MaterialsRepairManPower",currentDS.Tables["MaterialsAuditPrice"].Columns["Id"],currentDS.Tables["RepairManPowerCost"].Columns["MaterialsAuditPriceID"],true);currentDS.EnforceConstraints=true;return;}public Reports Update(System.Data.DataSet  dataSet){Reports reports=new Reports();for(int i=0;i<dataSet.Tables.Count;i++){if (dataSet.Tables[i].Rows.Count>0){this.Update(dataSet.Tables[i]);}}reports.ReturnObject=dataSet;reports.ReturnBool =true;return reports;}public Reports Update(System.Data.DataTable  dataTable){int iRecordsAffected=0;Reports reports=new Reports();System.Data.OleDb.OleDbDataAdapter dataAdapter=new  System.Data.OleDb.OleDbDataAdapter();;System.Data.OleDb.OleDbConnection cn= new System.Data.OleDb.OleDbConnection();System.Data.OleDb.OleDbCommandBuilder oCommandBuilder=new System.Data.OleDb.OleDbCommandBuilder();System.Data.OleDb.OleDbCommand oleInsertCommand1=new System.Data.OleDb.OleDbCommand();System.Data.OleDb.OleDbCommand oleInsertCommand2=new System.Data.OleDb.OleDbCommand();//创建适配器对象和连接对象。try{if (dataTable==null){reports.ReturnBool=true;reports.ModuleName="Update";reports.ReturnInt=0;return reports;}//cn.ConnectionString = @"Provider=SQLOLEDB.1;Password=infopro;Persist Security Info=True;User ID=sa;Initial Catalog=BusDev;Data Source=192.168.10.5;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=XHG;Use Encryption for Data=False;Tag with column collation when possible=False";cn=base.getConnection();System.Type oDataTableType=dataTable.GetType();//设置适配器对象的四种命令。switch(oDataTableType.Name){case "AppraiseProjectDataTable"://设置事件处理器。dataAdapter.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdatingOfAppraiseProjectDataTable );dataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdatedOfAppraiseProjectDataTable );dataAdapter.SelectCommand=dsMaterialsAudit.AppraiseProjectDataTable.GetSelectCommand("");dataAdapter.SelectCommand.Connection=cn;oCommandBuilder.DataAdapter=dataAdapter;dataAdapter.InsertCommand=oCommandBuilder.GetInsertCommand();dataAdapter.InsertCommand.Connection=cn;dataAdapter.UpdateCommand=oCommandBuilder.GetUpdateCommand();dataAdapter.UpdateCommand.Connection=cn;dataAdapter.DeleteCommand=oCommandBuilder.GetDeleteCommand();dataAdapter.DeleteCommand.Connection=cn;break;case "MaterialsAuditParameterDataTable"://设置事件处理器。dataAdapter.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdating );dataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdated );dataAdapter.SelectCommand=dsMaterialsAudit.MaterialsAuditParameterDataTable.GetSelectCommand("");dataAdapter.SelectCommand.Connection=cn;oCommandBuilder.DataAdapter=dataAdapter;dataAdapter.InsertCommand=oCommandBuilder.GetInsertCommand();dataAdapter.InsertCommand.Connection=cn;dataAdapter.UpdateCommand=oCommandBuilder.GetUpdateCommand();dataAdapter.UpdateCommand.Connection=cn;dataAdapter.DeleteCommand=oCommandBuilder.GetDeleteCommand();dataAdapter.DeleteCommand.Connection=cn;break;case "MaterialsAuditPriceDataTable"://设置事件处理器。dataAdapter.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdating );dataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdated );dataAdapter.SelectCommand=dsMaterialsAudit.MaterialsAuditPriceDataTable.GetSelectCommand("");dataAdapter.SelectCommand.Connection=cn;oCommandBuilder.DataAdapter=dataAdapter;dataAdapter.InsertCommand=oCommandBuilder.GetInsertCommand();dataAdapter.InsertCommand.Connection=cn;dataAdapter.UpdateCommand=oCommandBuilder.GetUpdateCommand();dataAdapter.UpdateCommand.Connection=cn;dataAdapter.DeleteCommand=oCommandBuilder.GetDeleteCommand();dataAdapter.DeleteCommand.Connection=cn;	break;case "RepairManPowerCostDataTable"://设置事件处理器。dataAdapter.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdatingOfRepairManPowerCostDataTable );dataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdatedOfRepairManPowerCostDataTable );dataAdapter.SelectCommand=dsMaterialsAudit.RepairManPowerCostDataTable.GetSelectCommand("");dataAdapter.SelectCommand.Connection=cn;dataAdapter.SelectCommand.UpdatedRowSource=UpdateRowSource.Both;oCommandBuilder.DataAdapter=dataAdapter;dataAdapter.InsertCommand=oCommandBuilder.GetInsertCommand();dataAdapter.InsertCommand.Connection=cn;dataAdapter.UpdateCommand=oCommandBuilder.GetUpdateCommand();dataAdapter.UpdateCommand.Connection=cn;dataAdapter.DeleteCommand=oCommandBuilder.GetDeleteCommand();dataAdapter.DeleteCommand.Connection=cn;break;case "RepairManPowerParameterSettingDataTable"://设置事件处理器。dataAdapter.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdating );dataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdated );dataAdapter.SelectCommand=dsMaterialsAudit.RepairManPowerParameterSettingDataTable.GetSelectCommand("");dataAdapter.SelectCommand.Connection=cn;oCommandBuilder.DataAdapter=dataAdapter;dataAdapter.InsertCommand=oCommandBuilder.GetInsertCommand();dataAdapter.InsertCommand.Connection=cn;dataAdapter.UpdateCommand=oCommandBuilder.GetUpdateCommand();dataAdapter.UpdateCommand.Connection=cn;dataAdapter.DeleteCommand=oCommandBuilder.GetDeleteCommand();dataAdapter.DeleteCommand.Connection=cn;break;default:break;}iRecordsAffected=dataAdapter.Update(dataTable);}catch(Exception err){Console.WriteLine(err.Message);}//返回更新后的DataTable给客户端,进行合并。reports.ReturnBool=true;reports.ModuleName="Update";reports.ReturnInt=iRecordsAffected;reports.ReturnObject=dataTable;return reports;}/// <summary>///  新增、修改、删除的业务方法/// </summary>/// <param name="sender"></param>/// <param name="args"></param>protected void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs args){//判断是否出错,如果出现错误,解释错误。if (args.RecordsAffected == 0 ){args.Row.RowError ="错误类型:"+args.Errors.GetType().Name+",  错误信息:"+args.Errors.Message;args.Status = UpdateStatus.SkipCurrentRow;//args.Status = UpdateStatus.ErrorsOccurred;return ;}//获取新增行的Idif (args.StatementType==StatementType.Insert){this.GetInsertRowId(args.Row);}switch( args.StatementType){case StatementType.Insert:break;case StatementType.Update:break;case StatementType.Delete:break;case StatementType.Select:break;}}protected static void OnRowUpdating(object sender, OleDbRowUpdatingEventArgs args){switch( args.StatementType){case StatementType.Insert:break;case StatementType.Update:					break;case StatementType.Delete:break;case StatementType.Select:break;}}#endregion#region  AppraiseProjectDataTable operator...../// <summary>///  新增、修改、删除的业务方法/// </summary>/// <param name="sender"></param>/// <param name="args"></param>protected void OnRowUpdatedOfAppraiseProjectDataTable(object sender, OleDbRowUpdatedEventArgs args){//提交之后对相关表进行更新//判断是否出错,如果出现错误,解释错误。if (args.RecordsAffected == 0 ){args.Row.RowError ="错误类型:"+args.Errors.GetType().Name+",  错误信息:"+args.Errors.Message;args.Status = UpdateStatus.SkipCurrentRow;return ;}//获取新增行的Idif (args.StatementType==StatementType.Insert){this.GetInsertRowId(args.Row);}switch( args.StatementType){case StatementType.Select:break;default://首先获取相关表System.Data.DataSet ds=args.Row.Table.DataSet;System.Data.DataTable dt=ds.Tables["MaterialsAuditPrice"];//获取相关参数Traffic.Mechanism.CauseTroubleRules.CauseTrouble  oOperator=new Traffic.Mechanism.CauseTroubleRules.CauseTrouble();//小五金的占材料费用比例(MaterialPricePercent)decimal materialsPricePercent=oOperator.GetMaterialsAuditParameter("MaterialPricePercent");System.Data.DataRow dr=args.Row;int materialsAuditPriceID=Convert.ToInt32(dr["MaterialsAuditPriceID"]);System.Data.DataRow mdr=dt.Rows.Find(materialsAuditPriceID);mdr["TotalMaterialsPrice"]=oOperator.ComputeTotalMaterialsPrice(materialsAuditPriceID);mdr["TotalHardwarePrice"]=oOperator.ComputeTotalHardWarePrice(materialsAuditPriceID);mdr["TotalPrice"]=oOperator.ComputeTotalPrice(materialsAuditPriceID);(new Traffic.Mechanism.CauseTroubleRules.CauseTroubleOperatorEx()).Update(dt);break;}}#endregion#region  Search、LoadByID 对象操作/// <summary>///  根据条件查找对象 ( 票库, 票库入库单, 票库调拨单 , 票库调入单, 票库调出单, 票库作废单)/// </summary>/// <param name="savetype">对象的类型</param>/// <param name="searchObject">搜索条件对象</param>/// <param name="currentPage">当前页号</param>/// <param name="pageSize">每页记录数</param>/// <param name="numResults">总记录数</param>/// <returns></returns>public Reports Search(System.Data.DataTable dataTable,string sSQL,Props searchObject,int currentPage, int pageSize,ref int numResults){int iRecordsAffected=0;Reports reports=new Reports();System.Data.OleDb.OleDbDataAdapter dataAdapter=new  System.Data.OleDb.OleDbDataAdapter();;System.Data.OleDb.OleDbConnection cn= new System.Data.OleDb.OleDbConnection();//创建适配器对象和连接对象。cn=this.getConnection();System.Type oDataTableType=dataTable.GetType();string sWhere="";if (searchObject!=null){foreach (Prop p in searchObject) {string SearchValue=(string)p.PropValue;if (SearchValue==null|SearchValue.ToString().Trim()==String.Empty) continue;sWhere+=" And ";switch (p.Key.ToLower()){case "Id":          sWhere+=p.Key+" "+p.OpWay+" "+p.PropValue;break;default:if (p.OpWay.ToString().Trim().ToLower()=="like"){sWhere+=p.Key+" like  '%"+p.PropValue+"%' ";}else{ sWhere+=p.Key+" "+p.OpWay+"  '"+p.PropValue+"' ";}break;}}  }if (sWhere.Trim()!=""){sWhere=sWhere.Substring(4);sWhere=" Where "+ sWhere;}//设置适配器对象的Select命令。System.Data.OleDb.OleDbCommand  oleSelectCommand=new System.Data.OleDb.OleDbCommand ();oleSelectCommand.CommandText=sSQL+sWhere;oleSelectCommand.Connection=cn;dataAdapter.SelectCommand=oleSelectCommand;//调用适配器的Fill命令。dataTable.Clear();iRecordsAffected=dataAdapter.Fill(dataTable.DataSet,(currentPage-1)*pageSize,numResults,dataTable.TableName);			//装载后恢复计算关系。//返回更新后的DataTable给客户端,进行合并。reports.ReturnBool=true;reports.ModuleName="Search";reports.ReturnInt=iRecordsAffected;reports.ReturnObject=dataTable;return reports;}/// <summary>///  根据条件查找对象 ( 票库, 票库入库单, 票库调拨单 , 票库调入单, 票库调出单, 票库作废单)/// </summary>/// <param name="savetype">对象的类型</param>/// <param name="searchObject">搜索条件对象</param>/// <param name="currentPage">当前页号</param>/// <param name="pageSize">每页记录数</param>/// <param name="numResults">总记录数</param>/// <returns></returns>public Reports Search(System.Data.DataTable dataTable,Props searchObject,int currentPage, int pageSize,ref int numResults){int iRecordsAffected=0;Reports reports=new Reports();System.Data.OleDb.OleDbDataAdapter dataAdapter=new  System.Data.OleDb.OleDbDataAdapter();;System.Data.OleDb.OleDbConnection cn= new System.Data.OleDb.OleDbConnection();//创建适配器对象和连接对象。//cn.ConnectionString = @"Provider=SQLOLEDB.1;Password=infopro;Persist Security Info=True;User ID=sa;Initial Catalog=BusDev;Data Source=192.168.10.5;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=XHG;Use Encryption for Data=False;Tag with column collation when possible=False";cn=this.getConnection();System.Type oDataTableType=dataTable.GetType();string sWhere="";foreach (Prop p in searchObject) {string SearchValue=(string)p.PropValue;if (SearchValue==null|SearchValue.ToString().Trim()==String.Empty) continue;sWhere+=" And ";switch (p.Key.ToLower()){case "Id":          sWhere+=p.Key+" "+p.OpWay+" "+p.PropValue;break;default:if (p.OpWay.ToString().Trim().ToLower()=="like"){sWhere+=p.Key+" like  '%"+p.PropValue+"%' ";}else{ sWhere+=p.Key+" "+p.OpWay+"  '"+p.PropValue+"' ";}break;}}  if (sWhere.Trim()!=""){sWhere=sWhere.Substring(4);sWhere=" Where "+ sWhere;}//设置适配器对象的Select命令。switch(oDataTableType.Name){case "AppraiseProjectDataTable":dataAdapter.SelectCommand=dsMaterialsAudit.AppraiseProjectDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;case "MaterialsAuditParameterDataTable":dataAdapter.SelectCommand=dsMaterialsAudit.MaterialsAuditParameterDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;case "MaterialsAuditPriceDataTable":dataAdapter.SelectCommand=dsMaterialsAudit.MaterialsAuditPriceDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;case "RepairManPowerCostDataTable":dataAdapter.SelectCommand=dsMaterialsAudit.RepairManPowerCostDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;case "RepairManPowerParameterSettingDataTable":dataAdapter.SelectCommand=dsMaterialsAudit.RepairManPowerParameterSettingDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;case "tbBusCompanyDataTable":dataAdapter.SelectCommand=dsBusCompany1.tbBusCompanyDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;case "tbRouteDataTable":dataAdapter.SelectCommand=dsBusCompany1.tbRouteDataTable.GetSelectCommand(sWhere);dataAdapter.SelectCommand.Connection=cn;break;default:reports.ReturnBool =false;break;}//调用适配器的Fill命令。dataTable.Clear();iRecordsAffected=dataAdapter.Fill(dataTable.DataSet,(currentPage-1)*pageSize,numResults,dataTable.TableName);			//返回更新后的DataTable给客户端,进行合并。reports.ReturnBool=true;reports.ModuleName="Search";reports.ReturnInt=iRecordsAffected;reports.ReturnObject=dataTable;return reports;}#endregion}

DemoNew.cs文件:

	public class CauseTroubleOperatorNew:Traffic.Common.TrafficOperatorEx{#region GetSelectCommand方法private   System.Data.OleDb.OleDbCommand GetSelectCommand(string sDataTableName ,string sWhere ){System.Data.OleDb.OleDbCommand oleDbCommand = new System.Data.OleDb.OleDbCommand();	switch(sDataTableName){case "TroubleMaterialCostDataTable":oleDbCommand.CommandText="SELECT * FROM TroubleMaterialCost";break;case "MaterialParameterDataTable":oleDbCommand.CommandText="SELECT * FROM MaterialParameter";break;case "MaterialAuditParameterDataTable":oleDbCommand.CommandText="SELECT * FROM MaterialAuditParameter";break;case "TotalAuditPriceDataTable":oleDbCommand.CommandText="SELECT * FROM TotalAuditPrice";break;case "ManPowerCostDataTable":oleDbCommand.CommandText="SELECT * FROM ManPowerCost";break;case "ManPowerParameterDataTable":oleDbCommand.CommandText="SELECT * FROM ManPowerParameter";break;case "ManHourDataTable":oleDbCommand.CommandText="SELECT * FROM ManHour";break;case "DamageLevelDataTable":oleDbCommand.CommandText="SELECT * FROM DamageLevel";break;case "wzMaterialDataTable":oleDbCommand.CommandText="SELECT * FROM wzMaterial";break;case "HFrequenceMaterialDataTable":oleDbCommand.CommandText="SELECT * FROM HFrequenceMaterial";break;case "wzMaterialOutBillDataTable":oleDbCommand.CommandText="SELECT * FROM wzMaterialOutBill";break;case "wzMaterialOutBillMXDataTable":oleDbCommand.CommandText="SELECT * FROM wzMaterialOutBillMX";break;default:break;}if (oleDbCommand.CommandText!=""){oleDbCommand.CommandText=oleDbCommand.CommandText+" "+sWhere;						}if (sDataTableName=="HFrequenceMaterialDataTable"){oleDbCommand.CommandText=oleDbCommand.CommandText+" order by Frequence DESC";}return oleDbCommand;}#endregion#region Update方法public Reports Update(System.Data.DataTable  dataTable){int iRecordsAffected=0;Reports reports=new Reports();System.Data.OleDb.OleDbDataAdapter dataAdapter=new  System.Data.OleDb.OleDbDataAdapter();;System.Data.OleDb.OleDbConnection cn= new System.Data.OleDb.OleDbConnection();System.Data.OleDb.OleDbCommandBuilder oCommandBuilder=new System.Data.OleDb.OleDbCommandBuilder();//创建适配器对象和连接对象。try{if (dataTable==null){reports.ReturnBool=true;reports.ModuleName="Update";reports.ReturnInt=0;return reports;}cn=this.getConnection();System.Type oDataTableType=dataTable.GetType();//设置适配器对象的四种命令。dataAdapter.SelectCommand=this.GetSelectCommand(oDataTableType.Name,"");if (dataAdapter.SelectCommand !=null){//设置事件处理器。dataAdapter.RowUpdating += new OleDbRowUpdatingEventHandler( OnRowUpdating );dataAdapter.RowUpdated += new OleDbRowUpdatedEventHandler( OnRowUpdated );dataAdapter.SelectCommand.Connection=cn;oCommandBuilder.DataAdapter=dataAdapter;System.Data.OleDb.OleDbCommand oleInsertCommand1=oCommandBuilder.GetInsertCommand();System.Data.OleDb.OleDbCommand oleInsertCommand2=new System.Data.OleDb.OleDbCommand() ;oleInsertCommand2.UpdatedRowSource=UpdateRowSource.Both;					oleInsertCommand2.CommandText=oleInsertCommand1.CommandText+"; SELECT * FROM "+dataTable.TableName+" WHERE (Id = @@IDENTITY)";foreach( System.Data.OleDb.OleDbParameter oleDbParameter in oleInsertCommand1.Parameters){oleInsertCommand2.Parameters.Add(oleDbParameter.ParameterName,oleDbParameter.OleDbType,oleDbParameter.Size,oleDbParameter.SourceColumn);}dataAdapter.InsertCommand=oleInsertCommand2;dataAdapter.InsertCommand.Connection=cn;dataAdapter.UpdateCommand=oCommandBuilder.GetUpdateCommand();dataAdapter.UpdateCommand.Connection=cn;dataAdapter.DeleteCommand=oCommandBuilder.GetDeleteCommand();dataAdapter.DeleteCommand.Connection=cn;	//调用适配器的Update命令。iRecordsAffected=dataAdapter.Update(dataTable);}//这里写其他业务规则。}catch(Exception err){Console.WriteLine(err.Message);}//返回更新后的DataTable给客户端,进行合并。reports.ReturnBool=true;reports.ModuleName="Update";reports.ReturnInt=iRecordsAffected;reports.ReturnObject=dataTable;return reports;}/// <summary>///  新增、修改、删除的业务方法/// </summary>/// <param name="sender"></param>/// <param name="args"></param>protected static void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs args){//判断是否出错,如果出现错误,解释错误。if (args.RecordsAffected == 0 ){args.Row.RowError =CErrorHandler.TranslateError(args);args.Status = UpdateStatus.SkipCurrentRow;//args.Status = UpdateStatus.ErrorsOccurred;return ;}switch( args.StatementType){case StatementType.Insert:break;case StatementType.Update:break;case StatementType.Delete:break;case StatementType.Select:break;}}#endregion#region  Search、LoadByID 对象操作/// <summary>///  根据条件查找对象(公司)/// </summary>/// <param name="savetype">对象的类型</param>/// <param name="searchObject">搜索条件对象</param>/// <param name="currentPage">当前页号</param>/// <param name="pageSize">每页记录数</param>/// <param name="numResults">总记录数</param>/// <returns></returns>public Reports Search(System.Data.DataTable dataTable,Props searchObject,int currentPage, int pageSize,ref int numResults){int iRecordsAffected=0;Reports reports=new Reports();System.Data.OleDb.OleDbDataAdapter dataAdapter=new  System.Data.OleDb.OleDbDataAdapter();;System.Data.OleDb.OleDbConnection cn= new System.Data.OleDb.OleDbConnection();//创建适配器对象和连接对象。cn=this.getConnection();System.Type oDataTableType=dataTable.GetType();string sWhere="";foreach (Prop p in searchObject) {string SearchValue=(string)p.PropValue;if (SearchValue==null|SearchValue.ToString().Trim()==String.Empty) continue;sWhere+=" And ";switch (p.Key.ToLower()){case "Id":          sWhere+=p.Key+" "+p.OpWay+" "+p.PropValue;break;default:if (p.OpWay.ToString().Trim().ToLower()=="like"){sWhere+=p.Key+" like  '%"+p.PropValue+"%' ";}else{ sWhere+=p.Key+" "+p.OpWay+"  '"+p.PropValue+"' ";}break;}}  if (sWhere.Trim()!=""){sWhere=sWhere.Substring(4);sWhere=" Where "+ sWhere;}//设置适配器对象的Select命令。dataAdapter.SelectCommand=this.GetSelectCommand(oDataTableType.Name,sWhere);dataAdapter.SelectCommand.Connection=cn;//调用适配器的Fill命令。dataTable.Clear();iRecordsAffected=dataAdapter.Fill(dataTable.DataSet,(currentPage-1)*pageSize,numResults,dataTable.TableName);			//返回更新后的DataTable给客户端,进行合并。reports.ReturnBool=true;reports.ModuleName="Search";reports.ReturnInt=iRecordsAffected;reports.ReturnObject=dataTable;return reports;}#endregion}

李青与诺基亚的兴衰

李青的学历只有大专,但是很喜欢编程的工作。据他自己说,上学期间,就是喜欢打游戏,所以才耽误了考试,没有考上本科。

事实也的确如他所说,他的手机是当时带symbian系统的。有一次迟到,说symbian系统的闹钟坏了,当时也觉得奇怪。手机闹钟都能坏,这诺基亚估计也快差不多了。

果然,几年以后,当各种智能手机流行的时候,诺基亚成了历史。

刚过来的时候,李青还是很卖力的工作,毕竟年轻气盛,很想好好的干一番事业。他来了以后,就跟X经理打得火热,毕竟年纪上更加相近一些。有一次他跟X经理说,等他到我的年龄的时候,一定要比我混的好。

当时的我,并没有在意这些话的真假,也没有去想背后的含义。

并行项目下的利益纠葛与团队协作

上次提及,我们正并行推进两大项目:一是关乎车辆安全的信息系统(简称AQ系统),另一则是ZL系统。AQ系统已由我初步开发,框架大体成型;而ZL系统则尚处于需求与框架构建阶段。因此,我决定安排李青接手AQ系统的后续开发工作,而我则继续担任与客户沟通协调的重任。

客户方的负责人同样姓李,虽非IT出身,但在业务领域内却是行家里手,更是集团车辆安全部门的副总。一般而言,副总都是实干家,李副总自然也不例外。幸运的是,我们之间的沟通一直顺畅无阻,我也在逐步深入了解业务细节。

还记得之前文章中提及的利益问题吗?在AQ项目的管理过程中,我深刻感受到了利益的重要性。经过一系列操作,最终的目的就是为了确定事故费用,以便与保险公司、车队以及驾驶员进行结算。

当时,交强险刚刚推出,为了这个项目,我特意学习了交强险的相关知识。期间,我与李副总就一些问题展开了多次讨论,而大多数情况下,他的见解都是正确的。

起初,李青并未参与这些讨论,都是我确认需求后,再交给他进行代码实现。然而,随着李副总对项目进度的日益关注,为了加快进度,我开始带着李青一同参加沟通会议,这大大减少了信息传递的误差。

但这也引发了一个问题:我发现李青开始与李副总走得很近,甚至在业务讨论中,他的立场明显倾向于李副总。当时,我以为他只是为了加快进度,所以并未多想。然而,现在回想起来,我当时的判断或许过于草率了。

未完待续。。。

相关文章:

  • Workflow轻量级工作流引擎实现
  • C++高并发内存池ConcurrenMemoPool
  • mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
  • gis系统中如何提高shp大文件加载效率
  • B端可视化像企业数据的透视镜,看清关键信息
  • C 语 言 --- 指 针 3
  • jangow靶机笔记(Vulnhub)
  • 深度学习数据预处理:Dataset类的全面解析与实战指南
  • 在Windows创建虚拟环境如何在pycharm中配置使用
  • 【滑动窗口】最⼤连续 1 的个数 III(medium)
  • MLA(多头潜在注意力)原理概述
  • leetcode 2563. 统计公平数对的数目 中等
  • turtle库绘制进阶图形
  • 【Canvas与旗帜】标准英国米字旗
  • 深入解析进程与线程:区别、联系及Java实现
  • 【大模型框架】LLAMA-FACTORY使用总结
  • 【工控基础】工业相机设置中,增益和数字增益有什么区别?
  • 网络爬虫和前端相关知识
  • 数据结构——栈以及相应的操作
  • 健康养生:拥抱美好生活的基石
  • 法官颁布紧急临时禁止令,中国留学生诉美国政府“首战胜利”
  • 美方将对中国制造船只征收“港口费”,外交部:损人害己
  • 马上评丨黄仁勋到访中国,一个重要节点和一句大实话
  • 江西一季度GDP为7927.1亿元,同比增长5.7%
  • 经济日报:扩大内需与扩大开放并行不悖
  • 英伟达CEO黄仁勋到访北京,称希望继续与中国合作