您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 单元10 数据验证与容错处理
单元10单数据验证与容错处理回顾应用系统中,编号通常有两种生成方法:自动编号和手工编号。SQLServer中,使用Identity标识列实现自动编号,可以使用SCOPE_IDENTITY()方法获取最后插入数据的标识列值。手工编号有查表法和独立编号表法。查表法相对简单,但易造成进程阻塞,独立编号表法很少造成进程阻塞。表达树形层次数据的表设计,可采用单编号和双编号方法。双编号法的树层次不受限制,因而更通用。VS中实现树的界面,采用TreeView控件。TreeView控件的重要属性包括:Nodes、SelectedNode、ImageList等,主要方法包括:Add、Clear等。树中每个结点为TreeNode类,其主要的属性包括:Text、Expanded、Nodes等。本单元任务任务一实现“登录”验证任务二实现“录入成绩”验证新增管理员新增教师新增学生本单元目标掌握用ManageMentStudio给表添加约束的方法掌握添加约束的T-SQL掌握使用控件的Validating事件进行数据验证掌握使用ErrorProvider控件进行数据验证掌握使用方法和函数进行类型验证掌握窗体范围内验证掌握DateTimePicker控件的主要属性、方法掌握MaskEdit控件的主要属性、方法任务一实现“登录”验证任务描述:任务分析:周丽测试学生信息系统,发现用户不输入任何信息,单击【登录】按钮,系统报提示信息“对不起,该用户/密码不正确!”。周丽提交测试记录后,大宝经理指出,用户未输入任何信息时,不能将用户验证发给服务器,加重服务器和网路传输的负担,而应在表示层验证,责令曾伟修改。用户输入验证:当用户输入非法数据时(必须用户类别、用户名、密码)都输入,才能通过验证。用户身份验证:将用户输入的用户类别、用户名、密码交给服务器,如果与数据表中的用户信息和密码一致,通过验证;否则不能通过验证。数据验证与容错处理概述常用的数据验证有以下三种:在数据层验证数据在表示层验证数据业务层验证数据表示层验证表示层验证可以为最终用户构造一个更具人性化、响应性更高并提供更多信息的验证过程。确认所需填写的域都已填写。类型验证。例如,“学号”、“班级号”、“邮政编号”等数据都是数字形式。“生日”要符合有效的日期格式。范围验证。例如,成绩一般为0~100,手机一般为11位,邮政编码为6位等。业务规则检查。例如,用户名、口令与数据库中相匹配等。使用控件的Validating事件Windows窗体提供了基础验证结构,并将其直接内置于每个控件中。每个控件CausesValidation的属性默认为True,则当焦点从一个控件切换到另一个控件时,将引发前一个控件的Validating事件。【例10-1】验证姓名必填privatevoidtxtName_Validating(objectsender,CancelEventArgse){//要求必须输入if(txtName.Text.Trim()==){e.Cancel=true;//无效输入,焦点任停留在本控件上。return;}}ErrorProvider控件该组件综合使用图标和提示向用户发出错误通知。【例10-2】使用ErrorProvider组件验证,综合使用图标和提示向用户发出错误通知voidtxtName_Validating(objectsender,CancelEventArgse){//需要输入姓名if(txtName.Text.Trim()==){errorProvider1.SetError(txtName,姓名为必填项!);e.Cancel=true;return;}else//姓名有效errorProvider.SetError(txtName,);}使用方法和函数进行类型验证IsXxx函数可以用来确定变量的内容是否为目标类型,常用的函数有:IsNumeric函数(VisualBasic)IsDate函数(VisualBasic)IsDBNull函数IsError函数IsNothing函数TryParse方法TryParse方法验证范例【例10-3】验证生日为有效日期,且年龄要大于16岁privatevoidtxtBirth_Validating(objectsender,CancelEventArgse){DateTimed;if(!DateTime.TryParse(txtBirth.Text,outd)){errorProvider1.SetError(txtBirth,必须为有效日期);e.Cancel=true;return;}//年龄至少为16周岁if(dDateTime.Now.AddYears(-16)){errorProvider1.SetError(txtBirth,年龄必须大于16岁);e.Cancel=true;return;}//有效输入errorProvider1.SetError(txtBirth,);}窗体范围内验证窗体范围的验证通过手动调用捆绑在每个Validating事件中的验证逻辑来实现【例10-4】单击“确定”按钮时,验证所有输入voidbtnOK_Click(objectsender,System.EventArgse){foreach(ControlcontrolinControls){//遍历每个控件//在控件上设置焦点control.Focus();//如果CausesValidation为True,引发控件的验证事件if(!Validate()){DialogResult=DialogResult.None;return;}}}将Cancel按钮的CausesValidation设置为False,避免验证DateTimePicker控件DateTimePicker控件的重要属性属性名说明Value设置或获取选定的日期或时间。Text获取控件内的文本信息。Format日期或时间格式(默认为长时间格式)。CustomFormat自定义日期/时间格式字符串。DateTimePicker应用用自定义格式显示日期只需要下面两个步骤:Format属性设置为DateTimePickerFormat.CustomCustomFormat属性设置为“yyyy-MM-dd”显示为时间只需要下面两个步骤:timePicker.Format=DateTimePickerFormat.Time;timePicker.ShowUpDown=true日期格式yyyy-MM-dd:月为大写MM,小写yyyy-mm-dd中mm表示分MaskedTextBox控件MaskedTextBox的重要属性和事件属性名说明Mask输入掩码,类似于格式字符串BeepOnError用户试图输入不符合掩码定义的字符时,是否听到短的警告音。Text返回控件的当前文本。事件名说明MaskInputRejected用户输入输入正确时发生MaskedTextBox控件范例【例10-6】新增用户窗体中,要求电话号码的显示格式为(xxxx)xxxxxxx。如果用户输入非法数据,显示提示信息①将MaskedTextBox控件从“工具箱”中拖到窗体上。②在“属性”窗口中,选择“Mask”属性,并单击属性名称旁边的按钮。③在“输入掩码”对话框中,在掩码文本框,录入(0000)0000000。④在“属性”窗口中,将BeepOnError属性设置为true。⑤将ToolTip控件从“工具箱”中拖到窗体上。⑥在MaskedTextBox控件的MaskInputRejected事件中编写代码:privatevoidmaskedTextBox1_MaskInputRejected(objectsender,MaskInputRejectedEventArgse){toolTip1.ToolTipTitle=非法输入;//提示持续五秒toolTip1.Show(对不起,只能输入0-9,maskedTextBox1,maskedTextBox1.Location,5000);}任务实施方法1:使用ErrorProvider控件方法2:提交前统一检查使用ErrorProvider控件代码分析在文本框txtLogInId的Validating事件编写代码。在文本框txtLogInPwd(密码)的Validating事件编写代码选择txtLogInId_Validating事件。privatevoidtxtLogInId_Validating(objectsender,CancelEventArgse){//要求必须输入if(sender.GetType()==typeof(TextBox))//文本框检查if(((TextBox)sender).Text.Trim()==)//文本框未输入{errorProvider1.SetError((TextBox)sender,“必须输入数据!”);e.Cancel=true;return;}elseerrorProvider1.SetError((TextBox)sender,);}使用ErrorProvider控件代码分析在组合框cboLogInType的Validating事件编写代码。privatevoidcboLogInType_Validating(objectsender,CancelEventArgse){if(cboLogInType.Text.Trim()==){errorProvider1.SetError(cboLogInType,必须选择用户类别!);e.Cancel=true;}elseerrorProvider1.SetError(cboLogInType,);}窗体范围内验证编写一个方法,进行所有控件的验证。在单击【登录】按钮时,调用所有控件验证的方法privateboolValidateInput(){foreach(ControlcontrolinControls){control.Focus();//在控件上设置焦点//验证导致引发控件的验证事件,如果CausesValidation为Trueif(!Validate()){returnfalse;}}returntrue;}privatevoidbtnLogIn_Click(objectsender,EventArgse){//如果用户输入验证通过,则进行用户身份验证if(ValidateInput()){…}提交前统一检查在很多数据库应用系统中,是在数据保存或提交前统一检查数据是否合法。privateboolValidateInput(){if(txtLogInId.Text.Trim()==){MessageBox.Show(请输入用户名,输入提示,MessageBoxButtons.OK,MessageBoxIcon.Information);txtLogInId.Focus();returnfalse;}elseif(txtLogInPwd.Text.Trim()==){MessageBox.Show(请输入密码,输入提示,MessageBoxButtons.OK,MessageBoxIcon.Information);txtLogInPwd.Focus();returnfalse;}elseif(cboLogInType.Text.Trim()==){MessageBox.Show(请选择登录类型,输入提示,MessageBoxButtons.OK,MessageBoxIcon.Information);cboLogInType.Focus();returnfalse;}elsereturntrue;}任务二实现“成绩录入”验证任务描述:任务分析:周丽测试成绩录入模块时,发现输入负分居然能保存正确,并且在成绩表中发现很多非法数据,成绩表存在的问题有:非法学号、非法课程号、非法成绩(例如160分、-50等)等。周丽提交测试记录后,大宝经理指出,要保证不能在什么条件下,都不能允许这些
本文标题:单元10 数据验证与容错处理
链接地址:https://www.777doc.com/doc-3468910 .html