单元10数据验证与容错处理.ppt
《单元10数据验证与容错处理.ppt》由会员分享,可在线阅读,更多相关《单元10数据验证与容错处理.ppt(36页珍藏版)》请在装配图网上搜索。
单元10,单数据验证与容错处理,回顾,应用系统中,编号通常有两种生成方法:自动编号和手工编号。SQLServer中,使用Identity标识列实现自动编号,可以使用SCOPE_IDENTITY()方法获取最后插入数据的标识列值。手工编号有查表法和独立编号表法。查表法相对简单,但易造成进程阻塞,独立编号表法很少造成进程阻塞。表达树形层次数据的表设计,可采用单编号和双编号方法。双编号法的树层次不受限制,因而更通用。VS中实现树的界面,采用TreeView控件。TreeView控件的重要属性包括:Nodes、SelectedNode、ImageList等,主要方法包括:Add、Clear等。树中每个结点为TreeNode类,其主要的属性包括:Text、Expanded、Nodes等。,本单元任务,任务一实现“登录”验证任务二实现“录入成绩”验证,新增管理员,新增教师,新增学生,本单元目标,掌握用ManageMentStudio给表添加约束的方法掌握添加约束的T-SQL掌握使用控件的Validating事件进行数据验证掌握使用ErrorProvider控件进行数据验证掌握使用方法和函数进行类型验证掌握窗体范围内验证掌握DateTimePicker控件的主要属性、方法掌握MaskEdit控件的主要属性、方法,任务一实现“登录”验证,任务描述:,任务分析:,周丽测试学生信息系统,发现用户不输入任何信息,单击【登录】按钮,系统报提示信息“对不起,该用户/密码不正确!”。周丽提交测试记录后,大宝经理指出,用户未输入任何信息时,不能将用户验证发给服务器,加重服务器和网路传输的负担,而应在表示层验证,责令曾伟修改。,用户输入验证:当用户输入非法数据时(必须用户类别、用户名、密码)都输入,才能通过验证。用户身份验证:将用户输入的用户类别、用户名、密码交给服务器,如果与数据表中的用户信息和密码一致,通过验证;否则不能通过验证。,数据验证与容错处理概述,常用的数据验证有以下三种:在数据层验证数据在表示层验证数据业务层验证数据,表示层验证,表示层验证可以为最终用户构造一个更具人性化、响应性更高并提供更多信息的验证过程。确认所需填写的域都已填写。类型验证。例如,“学号”、“班级号”、“邮政编号”等数据都是数字形式。“生日”要符合有效的日期格式。范围验证。例如,成绩一般为0100,手机一般为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控件的重要属性,DateTimePicker应用,用自定义格式显示日期只需要下面两个步骤:Format属性设置为DateTimePickerFormat.CustomCustomFormat属性设置为“yyyy-MM-dd”显示为时间只需要下面两个步骤:timePicker.Format=DateTimePickerFormat.Time;timePicker.ShowUpDown=true,日期格式yyyy-MM-dd:月为大写MM,小写yyyy-mm-dd中mm表示分,MaskedTextBox控件,MaskedTextBox的重要属性和事件,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等)等。周丽提交测试记录后,大宝经理指出,要保证不能在什么条件下,都不能允许这些数据出现(即使开发员使用ManagementStudio),而且要在用户录入非法数据时,就马上反馈给用户。,1要保证直接使用ManagementStudio修改数据都不能出现上诉非法数据,要使用数据层验证:唯一性:(学号、姓名)。期末成绩、平时成绩、总评成绩:在0-100之间。学号必须为学生表中已有的学生学号。课程号必须为课程表中已有的课程编号。2在用户录入非法数据时直接将提示信息反馈给用户,使用表示层验证,可以使用表示层的Validating事件判断成绩的有效性,而依赖关系关系(学号、课程号)等不由学生录入,而由系统生成。,数据层验证数据,数据层验证数据,主要使用约束来数据的完整型常用的约束类型:主键约束(PrimaryKeyConstraint):要求主键列数据唯一,并且不允许为空唯一约束(UniqueConstraint):要求该列唯一,允许为空,但只能出现一个空值。检查约束(CheckConstraint):某列取值范围限制、格式限制等,如有关年龄的约束默认约束(DefaultConstraint):某列的默认值,如我们的男性学员较多,性别默认为“男”外键约束(ForeignKeyConstraint):用于两表间建立关系,需要指定引用主表的那列,添加约束,创建表后添加约束的语法:,ALTERTABLE表名ADDCONSTRAINT约束名约束类型具体的约束说明,约束名的取名规则推荐采用:约束类型_约束字段主键(PrimaryKey)约束:如PK_stuNo唯一(UniqueKey)约束:如UQ_stuID默认(DefaultKey)约束:如DF_stuAddress检查(CheckKey)约束:如CK_stuAge外键(ForeignKey)约束:如FK_stuNo,主键约束,在ManagementStudio设置主键使用T-SQL添加主键,ALTERTABLEclassADDCONSTRAINTpk_classPrimaryKey(ClassID),教师演示:设置主键,唯一约束,在ManagementStudio添加唯一约束使用T-SQL添加唯一约束,ALTERTABLEclassADDCONSTRAINTpk_classUNIQUE(ClassName),教师演示:添加唯一约束,检查约束,在ManagementStudio添加检查约束使用T-SQL添加检查约束,教师演示:添加检查约束,ALTERTABLEStudentADDCONSTRAINTck_Student_EmailCHECK(EMAILLIKE%),默认约束,在ManagementStudio添加默认约束使用T-SQL添加默认约束,ALTERTABLEStudentADDCONSTRAINTdf_Student_LoginPWDDefault(888888)FORLoginPWD,教师演示:添加默认约束,允许空值,在ManagementStudio设置数据表的某列不允许为空,教师演示:设置某列不允许为空,DataGridView的Validating事件验证数据,在DataGirdView的单元格Validating事件实现验证数据,验证某列必填:,privatevoiddataGridView1_CellValidating(objectsender,DataGridViewCellValidatingEventArgse)if(dataGridView1.Columnse.ColumnIndex.Name=列名)if(e.FormattedValue.ToString()=String.Empty)dataGridView1.Rowse.RowIndex.ErrorText=错误信息;e.Cancel=true;,任务实施,1为成绩表添加约束2表示层验证数据,为成绩表添加约束,-主键约束AlterTableScoreAddConstraintpk_scorePrimaryKey(ID)-唯一约束AlterTableScoreAddConstraintuq_scoreUnique(Studentno,SubjectID)-默认约束AlterTableScoreAddConstraintuq_score_Score1Default(0)ForScore1AlterTableScoreAddConstraintuq_score_Score2Default(0)ForScore2AlterTableScoreAddConstraintuq_score_Score3Default(0)ForScore3-检查约束AlterTableScoreAddConstraintck_score_Score1Check(Score1=0andScore1=0andScore2=0andScore3=100)-外键约束AlterTableScoreAddConstraintfk_score_studentnoFOREIGNKEY(Studentno)REFERENCESStudent(Studentno)AlterTableScoreAddConstraintfk_score_subjectIDFOREIGNKEY(SubjectID)REFERENCESSubject(SubjectID),表示层验证数据,privatevoiddataGridView1_CellValidating(objectsender,DataGridViewCellValidatingEventArgse)if(dataGridView1.Columnse.ColumnIndex.Name=Score1)decimalcj;/检查是否数据if(!Decimal.TryParse(e.FormattedValue.ToString(),outcj)dataGridView1.Rowse.RowIndex.ErrorText=必须为合法数据!;e.Cancel=true;return;/检查是否0-100之间if(cj100)dataGridView1.Rowse.RowIndex.ErrorText=期末成绩必须在0-100之间!;e.Cancel=true;return;dataGridView1.Rowse.RowIndex.ErrorText=;,总结,使用T-SQL添加约束的语法是:ALTERTABLE表名ADDCONSTRAINT约束名约束类型约束说明SQLServer中有6种约束:非空约束(NOTNULL)、主键约束(PRIMARYKEY)、唯一约束(UNIQUE)、检查约束(CHECK)、默认约束(DEFAULT)、外键约束(FOREIGNKEY)。所有控件都有Validating事件,用它可进行数据验证。设置控件的输入无效:e.Cancel=true;ErrorProvider控件使用图标和提示向用户发出错误通知。errorProvider1.SetError(txtName,姓名为必填项!);可以使用TryParse方法、IsXxx函数进行类型验证遍历窗体每个控件:foreach(ControlcontrolinControls)DateTimePicker控件的主要属性有:Value获取所选择的日期/时)、Text获取控件显示的文本、Value.Date获取当前控件选取的短日期。MaskEdit控件的主要属性有MaskFormt。,作业,谢谢!,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单元 10 数据 验证 容错 处理
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文