单元10数据验证与容错处理.ppt

上传人:牧羊曲112 文档编号:6041762 上传时间:2023-09-17 格式:PPT 页数:36 大小:388.50KB
返回 下载 相关 举报
单元10数据验证与容错处理.ppt_第1页
第1页 / 共36页
单元10数据验证与容错处理.ppt_第2页
第2页 / 共36页
单元10数据验证与容错处理.ppt_第3页
第3页 / 共36页
单元10数据验证与容错处理.ppt_第4页
第4页 / 共36页
单元10数据验证与容错处理.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《单元10数据验证与容错处理.ppt》由会员分享,可在线阅读,更多相关《单元10数据验证与容错处理.ppt(36页珍藏版)》请在三一办公上搜索。

1、单元10,单数据验证与容错处理,回顾,应用系统中,编号通常有两种生成方法:自动编号和手工编号。SQL Server中,使用Identity标识列实现自动编号,可以使用SCOPE_IDENTITY()方法获取最后插入数据的标识列值。手工编号有查表法和独立编号表法。查表法相对简单,但易造成进程阻塞,独立编号表法很少造成进程阻塞。表达树形层次数据的表设计,可采用单编号和双编号方法。双编号法的树层次不受限制,因而更通用。VS中实现树的界面,采用TreeView控件。TreeView控件的重要属性包括:Nodes、SelectedNode、ImageList等,主要方法包括:Add、Clear等。树中每

2、个结点为TreeNode类,其主要的属性包括:Text、Expanded、Nodes等。,本单元任务,任务一 实现“登录”验证任务二 实现“录入成绩”验证,新增管理员,新增教师,新增学生,本单元目标,掌握用ManageMent Studio给表添加约束的方法掌握添加约束的T-SQL掌握使用控件的Validating事件进行数据验证掌握使用ErrorProvider控件进行数据验证掌握使用方法和函数进行类型验证掌握窗体范围内验证掌握DateTimePicker控件的主要属性、方法掌握MaskEdit控件的主要属性、方法,任务一 实现“登录”验证,任务描述:,任务分析:,周丽测试学生信息系统,发现

3、用户不输入任何信息,单击【登录】按钮,系统报提示信息“对不起,该用户/密码不正确!”。周丽提交测试记录后,大宝经理指出,用户未输入任何信息时,不能将用户验证发给服务器,加重服务器和网路传输的负担,而应在表示层验证,责令曾伟修改。,用户输入验证:当用户输入非法数据时(必须用户类别、用户名、密码)都输入,才能通过验证。用户身份验证:将用户输入的用户类别、用户名、密码交给服务器,如果与数据表中的用户信息和密码一致,通过验证;否则不能通过验证。,数据验证与容错处理概述,常用的数据验证有以下三种:在数据层验证数据在表示层验证数据业务层验证数据,表示层验证,表示层验证可以为最终用户构造一个更具人性化、响应

4、性更高并提供更多信息的验证过程。确认所需填写的域都已填写。类型验证。例如,“学号”、“班级号”、“邮政编号”等数据都是数字形式。“生日”要符合有效的日期格式。范围验证。例如,成绩一般为0100,手机一般为11位,邮政编码为6位等。业务规则检查。例如,用户名、口令与数据库中相匹配等。,使用控件的Validating事件,Windows窗体提供了基础验证结构,并将其直接内置于每个控件中。每个控件CausesValidation的属性默认为True,则当焦点从一个控件切换到另一个控件时,将引发前一个控件的Validating事件。【例10-1】验证姓名必填,private void txtName_

5、Validating(object sender,CancelEventArgs e)/要求必须输入 if()=)e.Cancel=true;/无效输入,焦点任停留在本控件上。return;,ErrorProvider控件,该组件综合使用图标和提示向用户发出错误通知。【例10-2】使用ErrorProvider组件验证,综合使用图标和提示向用户发出错误通知,void txtName_Validating(object sender,CancelEventArgs e)/需要输入姓名()=)errorProvider1.SetError(txtName,姓名为必填项!);e.Cancel=tru

6、e;return;else/姓名有效 errorProvider.SetError(txtName,);,使用方法和函数进行类型验证,IsXxx函数可以用来确定变量的内容是否为目标类型,常用的函数有:IsNumeric函数(Visual Basic)IsDate函数(Visual Basic)IsDBNull函数IsError函数IsNothing函数TryParse方法,TryParse方法验证范例,【例10-3】验证生日为有效日期,且年龄要大于16岁,private void txtBirth_Validating(object sender,CancelEventArgs e)DateT

7、ime d;if(!DateTime.TryParse(txtBirth.Text,out d)errorProvider1.SetError(txtBirth,必须为有效日期);e.Cancel=true;return;/年龄至少为16周岁 if(d DateTime.Now.AddYears(-16)errorProvider1.SetError(txtBirth,年龄必须大于16岁);e.Cancel=true;return;/有效输入 errorProvider1.SetError(txtBirth,);,窗体范围内验证,窗体范围的验证通过手动调用捆绑在每个Validating事件中的

8、验证逻辑来实现【例10-4】单击“确定”按钮时,验证所有输入,void btnOK_Click(object sender,System.EventArgs e)foreach(Control control in Controls)/遍历每个控件/在控件上设置焦点 control.Focus();/如果 CausesValidation 为 True,引发控件的验证事件 if(!Validate()DialogResult=DialogResult.None;return;,将Cancel按钮的CausesValidation设置为False,避免验证,DateTimePicker控件,Da

9、teTimePicker控件的重要属性,DateTimePicker应用,用自定义格式显示日期只需要下面两个步骤:Format属性设置为DateTimePickerFormat.CustomCustomFormat属性设置为“yyyy-MM-dd”显示为时间只需要下面两个步骤:timePicker.Format=DateTimePickerFormat.Time;timePicker.ShowUpDown=true,日期格式yyyy-MM-dd:月为大写MM,小写yyyy-mm-dd中mm表示分,MaskedTextBox控件,MaskedTextBox的重要属性和事件,MaskedTextB

10、ox控件范例,【例10-6】新增用户窗体中,要求电话号码的显示格式为(xxxx)xxxxxxx。如果用户输入非法数据,显示提示信息 将MaskedTextBox控件从“工具箱”中拖到窗体上。在“属性”窗口中,选择“Mask”属性,并单击属性名称旁边的 按钮。在“输入掩码”对话框中,在掩码文本框,录入。在“属性”窗口中,将BeepOnError属性设置为true。将ToolTip控件从“工具箱”中拖到窗体上。在MaskedTextBox控件的MaskInputRejected事件中编写代码:,private void maskedTextBox1_MaskInputRejected(object

11、 sender,MaskInputRejectedEventArgs e)toolTip1.ToolTipTitle=非法输入;/提示持续五秒 toolTip1.Show(对不起,只能输入0-9,maskedTextBox1,maskedTextBox1.Location,5000);,任务实施,方法1:使用ErrorProvider控件方法2:提交前统一检查,使用ErrorProvider控件代码分析,在文本框txtLogInId的Validating事件编写代码。在文本框txtLogInPwd(密码)的Validating事件编写代码选择txtLogInId_Validating事件。,p

12、rivate void txtLogInId_Validating(object sender,CancelEventArgs e)/要求必须输入 if(sender.GetType()=typeof(TextBox)/文本框检查 if(TextBox)sender).Text.Trim()=)/文本框未输入 errorProvider1.SetError(TextBox)sender,“必须输入数据!”);e.Cancel=true;return;else errorProvider1.SetError(TextBox)sender,);,使用ErrorProvider控件代码分析,在组合框

13、cboLogInType的Validating事件编写代码。,private void cboLogInType_Validating(object sender,CancelEventArgs e)if()=)errorProvider1.SetError(cboLogInType,必须选择用户类别!);e.Cancel=true;else errorProvider1.SetError(cboLogInType,);,窗体范围内验证,编写一个方法,进行所有控件的验证。在单击【登录】按钮时,调用所有控件验证的方法,private bool ValidateInput()foreach(Con

14、trol control in Controls)control.Focus();/在控件上设置焦点/验证导致引发控件的验证事件,如果 CausesValidation 为 True if(!Validate()return false;return true;,private void btnLogIn_Click(object sender,EventArgs e)/如果用户输入验证通过,则进行用户身份验证 if(ValidateInput(),提交前统一检查,在很多数据库应用系统中,是在数据保存或提交前统一检查数据是否合法。,private bool ValidateInput()if(

15、)=)MessageBox.Show(请输入用户名,输入提示,MessageBoxButtons.OK,MessageBoxIcon.Information);txtLogInId.Focus();return false;else if()=)MessageBox.Show(请输入密码,输入提示,MessageBoxButtons.OK,MessageBoxIcon.Information);txtLogInPwd.Focus();return false;else if()=)MessageBox.Show(请选择登录类型,输入提示,MessageBoxButtons.OK,Message

16、BoxIcon.Information);cboLogInType.Focus();return false;elsereturn true;,任务二 实现“成绩录入”验证,任务描述:,任务分析:,周丽测试成绩录入模块时,发现输入负分居然能保存正确,并且在成绩表中发现很多非法数据,成绩表存在的问题有:非法学号、非法课程号、非法成绩(例如160分、-50等)等。周丽提交测试记录后,大宝经理指出,要保证不能在什么条件下,都不能允许这些数据出现(即使开发员使用Management Studio),而且要在用户录入非法数据时,就马上反馈给用户。,1要保证直接使用Management Studio修改数

17、据都不能出现上诉非法数据,要使用数据层验证:唯一性:(学号、姓名)。期末成绩、平时成绩、总评成绩:在0-100之间。学号必须为学生表中已有的学生学号。课程号必须为课程表中已有的课程编号。2在用户录入非法数据时直接将提示信息反馈给用户,使用表示层验证,可以使用表示层的Validating事件判断成绩的有效性,而依赖关系关系(学号、课程号)等不由学生录入,而由系统生成。,数据层验证数据,数据层验证数据,主要使用约束来数据的完整型常用的约束类型:主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空唯一约束(Unique Constraint):要求该列唯一,允

18、许为空,但只能出现一个空值。检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男”外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的那列,添加约束,创建表后添加约束的语法:,ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 具体的约束说明,约束名的取名规则推荐采用:约束类型_约束字段主键(Primary Key)约束:如 PK_stuNo唯一(Unique Key)约束:如 UQ_s

19、tuID默认(Default Key)约束:如 DF_stuAddress检查(Check Key)约束:如 CK_stuAge外键(Foreign Key)约束:如 FK_stuNo,主键约束,在Management Studio设置主键 使用T-SQL添加主键,ALTER TABLE classADD CONSTRAINT pk_class Primary Key(ClassID),教师演示:设置主键,唯一约束,在Management Studio添加唯一约束 使用T-SQL添加唯一约束,ALTER TABLE classADD CONSTRAINT pk_class UNIQUE(Cla

20、ssName),教师演示:添加唯一约束,检查约束,在Management Studio添加检查约束 使用T-SQL添加检查约束,教师演示:添加检查约束,ALTER TABLE StudentADD CONSTRAINT ck_Student_Email CHECK(EMAIL LIKE%),默认约束,在Management Studio添加默认约束 使用T-SQL添加默认约束,ALTER TABLE StudentADD CONSTRAINT df_Student_LoginPWD Default(888888)FOR LoginPWD,教师演示:添加默认约束,允许空值,在Management

21、 Studio设置数据表的某列不允许为空,教师演示:设置某列不允许为空,DataGridView的Validating事件验证数据,在DataGirdView的单元格Validating事件实现验证数据,验证某列必填:,private void dataGridView1_CellValidating(object sender,DataGridViewCellValidatingEventArgs e)if(dataGridView1.Columnse.ColumnIndex.Name=列名)if()=String.Empty)dataGridView1.Rowse.RowIndex.Err

22、orText=错误信息;e.Cancel=true;,任务实施,1为成绩表添加约束 2表示层验证数据,为成绩表添加约束,-主键约束Alter Table Score Add Constraint pk_score Primary Key(ID)-唯一约束Alter Table Score Add Constraint uq_score Unique(Studentno,SubjectID)-默认约束Alter Table Score Add Constraint uq_score_Score1 Default(0)For Score1Alter Table Score Add Constrai

23、nt uq_score_Score2 Default(0)For Score2Alter Table Score Add Constraint uq_score_Score3 Default(0)For Score3-检查约束Alter Table Score Add Constraint ck_score_Score1 Check(Score1=0 and Score1=0 and Score2=0 and Score3=100)-外键约束Alter Table Score Add Constraint fk_score_studentno FOREIGN KEY(Studentno)REF

24、ERENCES Student(Studentno)Alter Table Score Add Constraint fk_score_subjectID FOREIGN KEY(SubjectID)REFERENCES Subject(SubjectID),表示层验证数据,private void dataGridView1_CellValidating(object sender,DataGridViewCellValidatingEventArgs e)if(dataGridView1.Columnse.ColumnIndex.Name=Score1)decimal cj;/检查是否数据

25、 if(!(),out cj)dataGridView1.Rowse.RowIndex.ErrorText=必须为合法数据!;e.Cancel=true;return;/检查是否0-100之间 if(cj 100)dataGridView1.Rowse.RowIndex.ErrorText=期末成绩必须在0-100之间!;e.Cancel=true;return;dataGridView1.Rowse.RowIndex.ErrorText=;,总结,使用T-SQL添加约束的语法是:ALTER TABLE 表名ADD CONSTRAINT 约束名 约束类型 约束说明SQL Server中有6种约

26、束:非空约束(NOT NULL)、主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、检查约束(CHECK)、默认约束(DEFAULT)、外键约束(FOREIGN KEY)。所有控件都有Validating事件,用它可进行数据验证。设置控件的输入无效:e.Cancel=true;ErrorProvider控件使用图标和提示向用户发出错误通知。errorProvider1.SetError(txtName,姓名为必填项!);可以使用TryParse方法、IsXxx函数进行类型验证遍历窗体每个控件:foreach(Control control in Controls)DateTimePicker控件的主要属性有:Value获取所选择的日期/时)、Text获取控件显示的文本、Value.Date获取当前控件选取的短日期。MaskEdit控件的主要属性有MaskFormt。,作业,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号