




已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BM2F培训明细 目录 BM2F培训明细1目录1变更历史5第一部分:培训大纲6第一章:简介61.1架构61.1.1架构图61.1.2演示前台、后台、数据库8(1)前台画面8(2)后台启动8(3)数据库访问91.2数据总线101.2.1数据回路图101.3数据库访问接口111.3.1为什么要提供数据访问接口(数据库、操作系统)111.3.2如何实现一致的数据访问接口111.4业务逻辑层数据类型121.4.1 PROC121.4.2 CPP12第二章:开发用户界面层122.1创建项目122.1.1目录结构132.1.2命名规范132.2 创建业务功能主界面132.2.1创建流程命名规范 EI.xml.配置142.3 添加控件142.3.1添加工具箱控件142.3.2创建数据集152.3.3向画面添加Grid控件182.3.4向画面添加详细控件192.4数据集EIInfo操作202.4.1数据集介绍202.4.2添加Table212.4.3添加Column212.4.4添加 Row222.5调用业务逻辑服务222.5.1调用后台服务222.5.2错误处理232.6获取后台返回信息24第三章:开发业务逻辑层253.1 创建后台项目253.1.1目录结构263.1.2命名规范273.2 创建服务Service273.2.1创建流程273.2.2命名规范273.2.3服务入口283.2.4注册服务283.3调试服务293.3.1BM2.xml介绍293.3.2调试服务处理进程30自动附加30手动,选择附加到进程313.4编写业务逻辑323.4.1获取用户界面层输入数据3 CString3 CDecimal3 CConvert343.4.2数据集EIClass操作353.5 数据库操作363.5.1执行查询操作3使用ExecuteQuery方法3使用ExecuteReader()373.5.2在SQL语句中使用参数373.5.3执行DML语句38a) .删除:38b) 修改:38c) 新增:383.6 使用实体对象类393.6.1使用TTA创建实体对象类393.6.2使用实体对象类执行增、删、改、查393.7 创建函数库413.8发布服务413.9调用Web Service41第四章:基于中小企业模板的开发414.1基于主子表模板画面的开发(EFFormMasterDetail)414.1.1模板介绍414.1.2前台画面开发42(1)新建项目42(2)建立数据集43(3)添加EI.dll的引用43(4)添加新建项,选择继承的窗体43(5)拖放表详细到窗体上43(6)写前台代码.43(7)至此,理论上.针对主表的增删改操作已完成43(8)补充:44(9)子表的相关操作454.1.3后台服务编写4查询总记录数4同时删除多张表内记录4 TTA导出CPP文件4同时操作多条4 delete,goto语句使用(不要使用)464.2基于列表详细模板画面(EFFormListDetail )的开发474.2.1模板介绍474.2.2前台画面开发484.2.3后台服务编写494.3关于自定义布局494.3.1布局介绍494.3.2几种使用场景51(1)单页面布局可配置51(2)参数画面的情况(根据参数显示不同画面)51a.加载前传参数,参数画面514.3.3补充53第二部分:封装的动态库介绍54第五章:EF.DLL的介绍545.1 EF.dll中的Form545.2 EF.DLL内的自定义控件555.2.1 EFDevTextEdit 文本框575.2.2 EFDevMemoEdit595.2.3 EFDevSpinEdit605.2.4 EFDevButtonEdit 带按钮的文本框605.2.5EFDevCheckEdit 选择框625.2.6 EFDevRadioGroup635.2.7 * EFDevLookUpEdit645.2.8 EFDevGrid6 创建视图6自定义按钮栏.6 设计窗体介绍675.3 LayoutControl715.3.1如何拖放,调整大小715.3.2控制Text显示,位置,大小725.3.3保存布局725.3.4 Group上显示能控制收缩的button73第三部分:问答列表741.运行新环境,需要安装哪些软件742.EFDevGrid 下方分页条,自定义按钮栏(对5.2.8补充)743.自定义查询,排序76变更历史2011 -01-04 创建(初稿)2011 -01-10 修改(纠正目录结构)2011- 03-24 添加(问答列表1,2,3)2011- 03-24 添加(, )2011- 05-25 添加(3.4, vs2008连接DB2)第一部分:培训大纲第一章:简介 1.1架构1.1.1架构图 (1) BM2 Framework for Windows(以下简称BM2F) 是面向企业级业务逻辑运算的分布式应用程序架构, 该架构由三个逻辑层组成:客户端、 应用程序服务器与数据库。这些层之间的逻辑关系, 如下图所示。 客户端承载用户界面, 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。 用户界面既可以是基于WinForm窗体的应用程序, 也可以是WEB浏览器。 应用程序服务器承载了DCDS与WEB服务器。DCDS负责处理来自EI客户端的服务调用请求, 调用指定的业务逻辑层服务。 WEB服务器负责响应来自浏览器的请求,通过EI客户端组件调用DCDS中指定的服务。 数据库为框架提供数据持久化服务, 并保证业务逻辑中数据操作的事务完整性。 (2)组件关系图如下:(经过框架封装,隐藏了服务调用细节,以及数据库操作细节,使开发者可以只用关心下图橙色的部分(DotNet窗体,业务程序)类似权限,管理,代码管理,电文管理,消息通知等,此类基础模块,绝大多数项目都有,所以作为独立模块,集成到框架作为通用的,大家都用.也即(ES.dll,EP.dll.EC.dll,ED.dll等)为了实现统一样式,使产品具有相同的风格,便于控制.设计了前台统一组件库(EF.dll) 此处实际上是在控件(如button,textbox,label等)和窗体程序之间又加入了一层.如下所示:1.1.2演示前台、后台、数据库(1)前台画面可简单地理解为:类似网站主页,已包含导航栏,主菜单,页头,页脚一样,新作的画面只需添加一个菜单项,并添加一个超链接地址,即可.在点击后显示在预留的内容区域内.(2)后台启动启动Server下Ubind文件夹下的cnslhive.exe:此处架构1是指在Server下Config目录下BM2.xml中的配置.当启动了Ubind下的cnslhive.exe后,会根据BM2.xml中的配置,寻找Arch文件夹下的对应的CPP/PROC文件夹下的Ubind中的cnslbee.exe.通过后一个cnslbee.exe调用对应的Ubind下的*.dll以及libd下的*.lib.架构1指CPP,架构2指PROC把配置文件中的Archs配置改为如下所示后,重新启动注意下面进程路径,新增了一个cnslbee.exe为ArchPROCUbindcnslbee.exe(3)数据库访问提供了统一的CDbCommand来操作数据库1.2数据总线1.2.1数据回路图为了统一数据传输格式,便于控制,统一前后台调用方式.框架提供的数据容器EIInfo与EIClass ,具有序列化与反序列化能力, 以适应跨应用程序边界的数据传输。EIInfo 是一个.Net 类, 用于用户界面层, 它内部封装了DataSet类。EIClass 是一个C+类, 其内部结构与EIInfo一致, EIInfo与EIClass的架构与数据可以实现互相转换。 这样类似于在前后台之间又加入了一层,如上图所示1.3数据库访问接口1.3.1为什么要提供数据访问接口(数据库、操作系统)不同的数据库提供的数据访问接口不同,对不同操作系统的支持度也不一样,编程方式也有所差异,就像C#前台访问数据库,有SqlConnection,OleDbConnection等一样,为了屏蔽数据库操作的差异,框架中提供了统一的访问接口,便于在不同数据库,不同操作系统上进行移植1.3.2如何实现一致的数据访问接口为了屏蔽不同数据库,不同操作系统的操作差异,框架提供了统一的数据访问接口(bm2data.dll,bm2core.dll等)相当于在各个数据库提供的API与编程人员的后台调用程序之间又加入一层.封装了,不同数据库的判断操作1.4业务逻辑层数据类型1.4.1 PROC -待补充-1.4.2 CPP第二章:开发用户界面层2.1创建项目打开Client端解决方案,新建 一个项目DEMP位于ClientDE目录下,项目类型选择类库。(如DEMP,DE是一级模块,MP是二级模块).一级模块文件夹位于Client下,与EH,EP平行(如DE,FI,QM等),二级模块在对应的一级模块下(如DEMP在DE文件夹下,FIAA,FIAP在FI文件夹下),一级模块文件夹(如DE)没有,则新建文件夹,然后再添加新建项目,修改项目属性:程序集名称:DEMP,默认名称空间DE,输出类型:类库 ,输出路径:. (使用相对路径位于一级模块下).重新生成项目,然后查看项目所在文件夹,在一级模块下会看到刚生成的DLL,如DE下的DEMP.dll删掉项目下的多余项(如class1.cs.),为项目添加常用引用EI.dll(使用时,再添加也可以)2.1.1目录结构2.1.2命名规范项目最长位数填写方式中文简称独立定义举例:DEMP.DLLA2字母一级模块名YDEB8字母DLL描述NMPC4.DLLDLL文件类型后缀N.DLL2.2 创建业务功能主界面客户端可使用任何形式的窗体,但是如果要在框架主画面中,已Tab页形式打开,必须继承自EFFormMain(或它的子类,如EFForm,EFFormListDetail等).2.2.1创建流程单击选择项目(DEMP),右击添加新项,选择Windows Forms,选择继承的窗体,输入窗体名称如:FormDEMP06.cs点击确定.在弹出的继承选择器中,点击浏览,找到ClientEP下的EF.dll,选择要继承的窗体(如EFForm),点击确定命名规范项目位数填写方式中文简称独立定义FormDEMP01A4Form画面标识NFormB2C一级模块名(大写)YDEC2C二级模块名(大写)YMPD2C流水号N01E2C扩展流水号N EI.xml.配置如下所示,会根据Defulat名称找默认的配置项,此处为local,根据ServerAddress服务地址,和DefaultPort监听端口,找对应的ServerType类型的服务.也即EI组件,会根据EI.xml配置会找启动的ServerUbindcnslhive.exe.并与之建立通信,当需要时(如调用了CallServers方法)时,调用应用程序服务器端对应的service2.3 添加控件2.3.1添加工具箱控件在工具箱上右击,添加选项卡-然后在上面右击弹出菜单,点击选择项-根据向导浏览找到EP下的EF.DLL.点击确定添加成功:2.3.2创建数据集在服务器资源管理器窗口,连接数据库.添加成功后.为项目添加新建项-选择数据集.然后即可在数据集的设计窗体中,右击添加表,添加列 或者从已连接的数据库中拖放相应的表到设计窗体:修改字段的Caption属性,DataType属性.Caption将作为中文标示,显示在textbox前或显示在列表头部,是日期型的修改DataType 2.3.3向画面添加Grid控件(1)直接选择数据源中某一表,选择自定义控件找到EFDevGrid,选中后,拖拉到画面即可或者,先拖放一个EFDevGrid到画面,然后为EFDevGrid创建一个新的GridView,然后设定DevGrid的DataSource.为数据集中某一张表.2.3.4向画面添加详细控件如上一,选择详细信息.拖拉到窗体上面即可拖放详细时,要为字段设计控件(默认为微软的TextBox,DateTimepicker等).可选择字段,然后点击右边下拉选择自定义,如果自定义中没有要找的控件,需要添加工具箱中的项若窗体使用了LayoutControl控件(如继承自EFFormListDetail时),拖放详细时,如果字段较多,会比较慢,请等待下,或单字段拖放 当开发人员的操作是一次性的,或者只是速度,性能上的问题时,建议考虑选择让最终用户操作更方便的开发模式.性能会随着软,硬件技术的提高而改进.方便使用上,却不易改变.(产品的最终发布可能会滞后开发1,2年甚至更久)2.4数据集EIInfo操作EI包括标准化的EIInfo和EITuxedo信息转换组件。它完全屏蔽了底层交换细节,解放了开发人员,使开发人员精力集中于业务数据的组织,而不用关心具体的交换机制,实现了数据交换的模块化。EIInfo是继承自DataSet.并添加了一些属性.(如块的概念,sysInfo等).此文档暂不考虑通过块来操作EIInfo,建议通过DataTable来操作行列数据.以下对DataSet的操作均可用于EIInfo2.4.1数据集介绍 -可参考MSDN中定义DataSet是数据表的集合,它可以包含任意多个数据表(DataTable)。数据表实质是有行(DataRow)和 列(DataColumn)组成的集合.为了保护内存中数据记录的正确性,避免并发访问时的读写冲突,DataSet对象中的DataTable负责维护每 一条记录,分别保存记录的初始状态和当前状态。通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet. 针对 DataSet 调用 AcceptChanges提交更改。或者,调用 RejectChanges 以取消更改。 可以简单地看做一个数据表(DataTable)的集合,可以通过类似,以下方式访问,表或操作表内信息操作代码如下2.4.2添加Table先获得表对象Tables .可看做一个表的数组,然后为改数组新增,或修改,访问等.可通过索引或表名称访问数据对象(表DataTable); 2.4.3添加Column先获取,表的Columns对象,如上可看做一个数组.2.4.4添加 Row2.5调用业务逻辑服务 因前后台应用程序分离(使用的语言不一样,操作系统也可能不一样),为了规范调用方式.框架规定调用方法(CallService最常用).同时统一参数类型,要求封装到类似DataSet的EIInfo内.也封装了内部转换细节,前台放到EIInfo,后台对应EIClass.可以认为两者结构完全相同2.5.1调用后台服务(1) 不需要向后台传入参数的情况 (2) 向后台传入参数 2.5.2错误处理(1)后台的错误信息,放入s.msg.在前台即可通过outInfo.sys_info.msg.进行获取(2) 默认情况下,如果窗体出现未捕获的异常,将向上层抛出,至到Main方法为止,会执行 EH如下代码,并弹出与下图类似的弹出框. 要尽量避免弹出此对话框,要在可能出现异常的地方,使用try catch语句,主动捕获异常,为了统一方便,建议在窗体事件中(包括窗体加载,显示,和由用户触发的一切事件),添加try catch语句.类似:a) 错误信息的处理:可以使用类似 this.EFMsgInfo = ex.Message; /在框架左下角显示也可以用弹出框,提示错误信息2.6获取后台返回信息如以上2.5中所讲,在后台service中对参数bcls_ret的操作(添加列,行,赋表名等),在前台的调用CallService的返回值中,以同样结构读取即可.可简单地认为后台对bcls_ret的操作.即是对前台调用CallService方法的返回值outInfo的操作.类型为EIInfo继承自DataSet.可以像操作DataSet一样操作EIInfo例如:第三章:开发业务逻辑层3.1 创建后台项目因后台项目配置属性较多,建议通过直接复制现有有项目(找目录结构类似,且生成成功的项目来复制)进行修改,然后通过添加现有项,添加到解决方案中. 主要的几点配置项解释如下:输出目录(在CPP.或PROC对应下的Ubind(发布版在Ubin)目录下.包含目录,(头文件位置,server下的Include和CPP/PROC下的Include)附加库(函数库静态库存放位置,Libd/Lib目录下3.1.1目录结构Server端一级目录主要文件夹如下所示:其中架构Arch下,包含CPP和Proc两种类型,以下以CPP为例,proc类似 其中Dev下存放,一级目录,然后是二级目录,然后是动态库,静态库文件.(此处没有严格定义,只要生成的静态库lib文件,和动态库dll文件能放到对应的Libd,Ubind下即可.3.1.2命名规范动态库以p_开头+模块名称+_服务号,.服务号1000以下为框架预留,业务使用100130000项目位数填写方式中文简称独立定义p_demp_18510A1p程序简称NpB1_分隔符N_C4字母模块名YdempD1_分隔符N_E2数字服务号Y185103.2 创建服务Service3.2.1创建流程在项目下,添加新建项,选择cpp文件,文件名可以取服务名称.文件写法如下:3.2.2命名规范通常取画面名+_功能名称 ,如demp01_inq .必须唯一,比如demp01_inq不能即出现在18510里面,又出现在4100里面3.2.3服务入口 / Service 入口BM2F_ENTERACE(paam01_ins)3.2.4注册服务服务的注册其实是插入到了表TEA01中.通过EA01,EA03画面,可按以方法插入:(1)在EA03页面,添加要注册的服务.程序名称为服务名称,说明是自定义的说明,路径一般为/Dev/DE (其中DE为顶级模块名,可能是FM,YM等) 子系统为二级模块名,如DEMO(或者FM下的FMBD等).程序类别选择S-Service. (2)在EA01.新增后,根据模块名,或者程序名称,可以在EA01中的待配置服务中,查询到,选择要配置的项,输入Server号,点击附加到进程-选择cpp项目对应的cnslbee.exe.前面提到过,当启动Server下Ubind下的cnslhive.exe时,会根据bm2.xml中的架构配置信息,到Arch找CPP或(和)PROC的文件夹下的Ubind里面的cnslbee.exe.当启动两个架构时,进程会出现两个cnslbee.exe.不便于区分,选错的话,又启动不了调试,所以建议选择自动附加,按上面的介绍进行调试如需停止调试,选择调试中的全部分离即可.3.4编写业务逻辑业务逻辑用C+实现,可理解为:除了前台(界面层)传入参数从bcls_rec中读取,要返回的值放入bcls_ret外,其他内容可完全自理(也可使用框架预定义的方法,数据类型,变量等)3.4.1获取用户界面层输入数据用户界面层(前台画面)输入的数据,放在EIInfo中,到了后台(框架封装了具体转换过程)就在第一个参数bcls_rec中,.EIClass也是一个继承自数据集的类对象.bcls_rec为EIClass类型的一个指针,可理解为指向前台传入的EIInfo值.而第二个参数bcls_ret即可看成是指向调用CallService的返回值EIInfo的指针.;,- 操作符用于指针如: bcls_rec-Tables定位到表的数组对象; 用于数组,下标从0开始,如bcls_rec-Tables0.取得第一张表 . 类对象,使用 .点操作符.如bcls_rec-Tables0.Rows取得第一张表的行数组: 域操作符,可使用于名称空间如BM2:CString BM2下的CString类. 可使用于类,如BM2:CConvert:ToString(i); CConvert的ToString方法(此处是静态方法,否则,需要使用 . 框架封装的类:参考(2/BM2F_Win/文档/BM2 Framework for Windows SDK 参考.doc) CStringDelete(int nIndex, int nCount = -1);从指定位置开始,删除指定数量的字符。void Empty();清空当前实例。int Find(const CString& strSub, int nStart = 0) const;报告指定的 CString 在此实例中的第一个匹配项的索引。该搜索从指定字符位置开始。int Find(const BM2_TCHAR* lpszSub, int nStart = 0) const;报告指向字符数组的指定指针指示的值在此实例中的第一个匹配项的索引。该搜索从指定字符位置开始。BM2_TCHAR GetAt(int nIndex) const;获取当前 CString 对象中位于指定字符位置的字符。int GetLength() const;获取当前示例包含字符的数目。CString Insert(int nIndex, const CString& pstr);在此实例中的指定索引位置插入一个指定的 CString 实例。CString Insert(int nIndex, const BM2_TCHAR* pstr);在此实例中的指定索引位置插入一个指向字符数组的指定指针指示的值。bool IsEmpty() const;报告此示例是否包含任何字符。CString Replace(const CString& strOld, const CString& strNew);将此实例中的指定 CString 的所有匹配项替换为其他指定的 CString。void SetAt(int nIndex, BM2_TCHAR ch);设置此示例指定位置的字符。CString Substring(int nFirst) const;从此实例检索子字符串。子字符串从指定的字符位置开始。CString Substring(int nFirst, int nCount) const;从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。CString ToLower();返回此 String 的转换为小写形式的副本CString ToUpper();返回此 String 的转换为大写形式的副本,返回时使用当前区域性的大小写规则。CString Trim(BM2_TCHAR chTarget = BM2_TEXT( );从当前 CString 对象移除指定的字符的所有前导匹配项和尾部匹配项。CString TrimLeft(BM2_TCHAR chTarget = BM2_TEXT( );从当前 CString 对象移除指定的字符的所有前导匹配项。CString TrimRight(BM2_TCHAR chTarget = BM2_TEXT( );从当前 CString 对象移除指定的字符的所有尾部匹配项。 CDecimal CDecimal Abs(void) const;Abs 方法获取 SqlDecimal 参数的绝对值。CDecimal Ceiling(void) const;返回大于或等于指定 SqlDecimal 结构的最小整数。CDecimal ConvertToPrecScale(int precision, int scale) const;将 SqlDecimal 操作数的值调整为指定精度和小数位数CDecimal Floor(void) const;将指定 SqlDecimal 数字舍入为下一个较小的整数。BM2_INT8 GetPrecision() const;获取用于表示 Value 属性的最大位数。BM2_INT8 GetScale() const;获取 Value 解析为的小数位数。bool IsNull() const;指示此 SqlDecimal 结构的 Value 是否为 Null。bool IsPositive() const;指示此 SqlDecimal 结构的 Value 是否大于零。static CDecimal Parse(CString& s);将数字的 String 表示形式转换为其等效的 SqlDecimal 形式。static CDecimal Parse(BM2_TCHAR* psz);将数字的 String 表示形式转换为其等效的 SqlDecimal 形式。CDecimal Power(double exp) const;将指定的 SqlDecimal 结构的值乘到指定的幂。CDecimal Round(int lPosition, bool fTruncate) const;以指定精度获取与指定 SqlDecimal 结构的值最接近的数字。CDecimal Round(int position) const;以指定精度获取与指定 SqlDecimal 结构的值最接近的数字。BM2_INT8 Sign(void) const;获取一个值,该值指示 SqlDecimal 结构的 Value 属性的符号。double ToDouble(void) const;返回等于此实例的 Value 属性的内容的双精度型值。float ToFloat(void) const;将此 SqlDecimal 结构转换为 SqlSingle。BM2_INT16 ToInt16(void) const;将此 SqlDecimal 结构转换为 SqlInt16。BM2_INT32 ToInt32(void) const;将此 SqlDecimal 结构转换为 SqlInt32。BM2_INT64 ToInt64(void) const;将此 SqlDecimal 结构转换为 SqlInt64。BM2_INT8 ToInt8(void) const;将此 SqlDecimal 结构转换为 SqlByte。CString ToString() const;将此 SqlDecimal 结构转换为 String。BM2_UINT16 ToUInt16(void) const;将此 SqlDecimal 结构转换为 SqlInt16。BM2_UINT32 ToUInt32(void) const;将此 SqlDecimal 结构转换为 SqlInt32。BM2_UINT64 ToUInt64(void) const;将此 SqlDecimal 结构转换为 SqlInt64。BM2_UINT8 ToUInt8(void) const;将此 SqlDecimal 结构转换为 SqlByte。 CConvertstatic CString ToString(int value, const BM2_TCHAR* lpszFormat = 0);将一个整型值转换成指定格式的字符串对象。static CString ToString(unsigned int value, const BM2_TCHAR* lpszFormat = 0);将一个无符号整型值转换成指定格式的字符串对象。static CString ToString(BM2_INT64 value, const BM2_TCHAR* lpszFormat = 0);将一个64位整型值转换成指定格式的字符串对象。static CString ToString(BM2_UINT64 value, const BM2_TCHAR* lpszFormat = 0);将一个无符号64位整型值转换成指定格式的字符串对象。static CString ToString(float value, const BM2_TCHAR* lpszFormat = 0);将一个浮点型值转换成指定格式的字符串对象。static CString ToString(double value, const BM2_TCHAR* lpszFormat = 0);将一个双精度浮点型值转换成指定格式的字符串对象。3.4.2数据集EIClass操作可通过光标放在EIClass上,然后右击转到定义,查看EIClass.h头文件,了解EIClass的使用,如下图继承自CDataSet大多数操作与DataSet类似.常用操作 解读实体对象类 异常处理3.5 数据库操作后台的service实际上是启动了一个事务,只有当返回值为0时,才会提交所做的更改,否则将执行回滚操作3.5.1执行查询操作使用ExecuteQuery方法使用ExecuteReader() 当执行CDbCommand 的ExecuteReader()方法时,实际上建立了一个CDataReader对象,该对象封装在CDbCommand内,为私有不可访问.然后调用Read()让CDataReader读取下一笔记录,如果有读到数据则传回True,若没有纪录则传回False.当读到数据时,就可使用类似GetString(int iColumn),GetDecimal(int iColumn)之类的方法返回相应值 当执行完ExecuteReader()相关操作后,若要继续使用同一个CDbCommand进行其他操作需要先调用Close()关闭CDataReader.3.5.2在SQL语句中使用参数CDbCommand对象在执行增删改查前需要得到一个正确的sql语句.该sql语句可以在构造方法时,传入类似CDbCommand comm2( select * from tpaam01 ,conn);或在定义comm后,通过comm2.SetCommandText( select * from tesuserinfo );方法传入.Sql语句可通过动态拼接字符串得到,类似或通过参数(类似存储过程中的参数传递),以参数名称出现在sql语句中,然后通过 comm2.Parameters.Set(参数名,值),给参数赋值.如下3.5.3执行DML语句使用ExecuteNonQuery()执行DML语句(类似insert,update,delete).该方法没有参数,返回值为影响的行数a) .删除:b) 修改:c) 新增: 3.6 使用实体对象类 TTA是一个数据库表的辅助维护工具,主要对数据库表,表字段,字段类型,描述等进行维护(注:TTA中对字段的更改,不会立马反映到实际数据库中,除非使用导出的sql语句重新建立,或修改表.因此程序中对表的操作,以实际数据库表字段为准.) TTA具有信息导出功能,可根据已定义的数据表,数据项等信息,生成sql脚本语句(如建表等),可以根据模板生成实体对象类.3.6.1使用TTA创建实体对象类TTA生成的实体对象类,结构如下图3.6.2使用实体对象类执行增、删、改、查使用实体对象类进行操作,一般步骤:(1)使用TTA导出对应的实体对象类文件(表名.h文件)放入到CPP下的Include文件夹下.(2)程序中,使用#include 表名.h 导入头文件定义实体对象类实例,如:CTPAAM01 tpaam01_inf(conn);需传入conn为构造参数使用MergeFrom给实体对象类实例赋值,类似tpaam01_inf.MergeFrom(bcls_rec-Tables0.Rows0);或者直接为对象赋值,如tpaam01_inf.REC_CREATOR = s.userid;(5)调用实体对象类实例的 方法,进行增删改查的操作新增实例:删除实例修改实例:3.7 创建函数库函数库,也即静态链接库,lib文件,主要存放公用的方法.配置项较多,可以和创建项目一样,通过复制,添加现有项,然后修改名称来创建函数库.3.8发布服务3.9调用Web Service第四章:基于中小企业模板的开发中小企业,因为大多数表是主子表的样式,类似:合同,合同明细.账单,账单明细等.而为了统一,特继承自EFForm定义了另外两个模板画面供使用.EFFormMasterDetail,EFFormListDetail.4.1基于主子表模板画面的开发(EFFormMasterDetail)4.1.1模板介绍规定:在框架上方添加了工具栏,如下图.上半部分显示主表信息,下半部分显示子表信息.工具栏的按钮针对主表记录的上一条,下一条,以及增删改等操作下方F1-F12按钮栏,针对子表Tab页内记录的增删改等操作(也可对主表操作,类似审核,判定等).所有操作只针对页面数据,只有当点击工具栏上的存盘(保存)后,才将修改存入数据库EFFormMasterDetail所做的工作,可以认为只是限定了一种布局样式.或说引导大家参考某一种布局.也可认为只是提前为你在页面上放了一个panel和一个tabControl控件.至于页面包含哪些按钮,工具栏各个按钮的点击事件都需自己定义,与模板无关.出现的几种使用方法1) 作为常见的单表查询画面.主表区放查询条件,子表区放列表信息2) 作为主子表,上面放主表的单条记录详细,下方放主表对应的子表列表信息.下方的按钮针对子表的增删改(以弹出画面或着直接在Grid上进行增删改)3) 作为主子表,上面放主表的单条记录详细,下方放主表对应的子表列表信息. 工具栏按钮对主表维护,下方只放一个子表维护按钮,当需要维护子表时,跳转到子表维护的画面针对第三种使用方法,做了模板EFFormMasterDetail2.简化了部分常用操作.如果没有特殊处理,只是简单增删改,可继承自EFFormMasterDetail2,如果不能用,可参考里面代码(以下以EFFormMasterDetail2为例介绍,如何快速开发一个主子表的画面)EFFormMasterDetail2(主要是封装了工具栏上的按钮,事件.如果你的画面继承自EFFormMasterDetail2则无需自己再定义工具栏按钮 事件,如果有不满足的,只需重写对应事件下的虚方法,如果重写仍不满足,则只能继承自EFFormMasterDetail)4.1.2前台画面开发(1)新建项目修改项目属性.打开服务器资源管理器,连接数据库(略)(2)建立数据集拖放数据库表到设计窗体,转换数据集中文标题,修改数据集字段类型(略)(3)添加EI.dll的引用(4)添加新建项,选择继承的窗体输入窗体名称,点击添加,浏览找到EP下的EF.dll,选择EFFormMasterDetail2(5)拖放表详细到窗体上 在窗体设计界面,点击菜单栏的数据-显示数据源.点击选择要维护的主表.在表右边的下拉项中选择详细信息. 为表的字段选择默认控件,点击字段,在右边的下拉框列表中,选择自定义的控件如EFDevTextEdit,如果没有.选择自定义,在弹出的选项中,为各个数据类型选择默认的关联控件,如String - EFDevTextEdit,Decimal-EFDevSpinEdit,DateTime-EFDevDateEdit等,如果找不到类似EF*的控件,则在工具箱添加选项卡,然后选择项,找ef.dll(略) 拖放选择好的表,详细信息到刚新建的窗体设计页面,会自动生成各字段的信息(一个lable + 一个编辑框),拖放各字段,调整布局.如果拖放完后,仍有太多空白,选择efPanelFormBottom控件,向上拖下,tabControl控件将上移(6)写前台代码.在窗体构造函数中,InitializeComponent();下方为父类变量赋值,类似如下所示.(假设你已写好了对主表的增删改操作对应的后台Service(7)至此,理论上.针对主表的增删改操作已完成工具栏上的增删改保存按钮,需要到ESBUTT进行注册,点击按钮名称后面的按钮,在弹出窗体中,最大化,在左下方可以看到工具栏的按钮,点击选择即可.如果上一条,下一条不可用.则可在窗体属性中的EFBar属性中,把BarFirstEnable.BarLastEnable.BarNextEnable, BarPreEnable 设为true即可,在此处设置工具栏的增删改保存,会无效,因为在框架加载窗体的时候,会根据是否注册进行再一次判断.(8)补充:如果要在窗体加载时, 对类似绑定控件之类进行初始化,可以重写OnInitialize()方法,类似如果期望在,新增一条数据后,对刚新增的数据进行操作,类似为的部分字段赋值,主键改为可写,清空子项等.可以重写OnAddNew方法,类似如果期望在新增完成后对,修改某些控件属性,类似主键改为只读,可重写AfterAddNew方法,类似如果期望在保存数据之前,对数据进行有效性验证等,可以重写CheckDataBeforeSave()方法,类似注意,此处使用了抛出异常,因为存在方法套方法的情况,所以如果只是return,可能只是终止了此方法的执行,并没达到理想效果 如果想在查询主表后,再查询并绑定子表信息,可以重写QueryChildTable()方法,类似(9)子表的相关操作除了查询,基类2中并没做处理,因模板并不知道子表是否存在,多个还是一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脊髓损伤病人护理查房
- 塔里木职业技术学院《中华射艺》2023-2024学年第一学期期末试卷
- 宁夏回族自治区中学卫市第五中学2025届初三第二次诊断性考试语文试题含解析
- 辽宁装备制造职业技术学院《生物组学》2023-2024学年第二学期期末试卷
- 景德镇陶瓷职业技术学院《基础医学实验(一)》2023-2024学年第一学期期末试卷
- 上海欧华职业技术学院《国际结算与贸易融资》2023-2024学年第二学期期末试卷
- 云南科技信息职业学院《药物分析》2023-2024学年第一学期期末试卷
- 山西卫生健康职业学院《高级生物信息学》2023-2024学年第二学期期末试卷
- 秦皇岛市重点中学2025届高三下学期研七考试化学试题含解析
- 铜川职业技术学院《花纸设计与排版》2023-2024学年第二学期期末试卷
- 保险信息服务合同范本
- 老年人康乐活动-老年节庆活动组织策划
- 预防接种服务提质行动方案2-4-10
- 绿化带改停车位施工方案
- 绿化苗木组织供应及售后服务方案
- 2023-2024学年浙江省环大罗山联盟高一下学期4月期中物理试题(解析版)
- 合用变压器协议
- 护理人员岗位绩效考核评价标准
- 2024年郑州轨道工程职业学院单招职业适应性测试题库学生专用
- 2024年山西省太原市中考二模地理试卷
- 《通信原理》樊昌信曹丽娜编著第六版课件
评论
0/150
提交评论