版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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】验证姓名必填
5、,private void txtName_Validating(object sender, CancelEventArgs e) / 要求必须输入 if (txtName.Text.Trim() = ) e.Cancel = true; /无效输入,焦点任停留在本控件上。 return; ,ErrorProvider控件,该组件综合使用图标和提示向用户发出错误通知 。 【例10-2】使用ErrorProvider组件验证,综合使用图标和提示向用户发出错误通知,void txtName_Validating(object sender, CancelEventArgs e) / 需要输入姓名
6、 if(txtName.Text.Trim() = ) errorProvider1.SetError(txtName, 姓名为必填项!); e.Cancel = true; return; else / 姓名有效 errorProvider.SetError(txtName, ); ,使用方法和函数进行类型验证,IsXxx函数可以用来确定变量的内容是否为目标类型,常用的函数有: IsNumeric函数(Visual Basic) IsDate函数(Visual Basic) IsDBNull函数 IsError函数 IsNothing函数 TryParse方法,TryParse方法验证范例,
7、【例10-3】验证生日为有效日期,且年龄要大于16岁,private void txtBirth_Validating(object sender, CancelEventArgs e) DateTime 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, 年
8、龄必须大于16岁); e.Cancel = true; return; /有效输入 errorProvider1.SetError(txtBirth, ); ,窗体范围内验证,窗体范围的验证通过手动调用捆绑在每个Validating事件中的验证逻辑来实现 【例10-4】单击“确定”按钮时,验证所有输入,void btnOK_Click(object sender, System.EventArgs e) foreach( Control control in Controls ) /遍历每个控件 / 在控件上设置焦点 control.Focus(); /如果 CausesValidation
9、为 True,引发控件的验证事件 if( !Validate() ) DialogResult = DialogResult.None; return; ,将Cancel按钮的CausesValidation设置为False ,避免验证,DateTimePicker控件,DateTimePicker控件的重要属性,DateTimePicker应用,用自定义格式显示日期只需要下面两个步骤: Format属性设置为DateTimePickerFormat.Custom CustomFormat属性设置为“yyyy-MM-dd” 显示为时间只需要下面两个步骤: timePicker.Format =
10、 DateTimePickerFormat.Time; timePicker.ShowUpDown = true,日期格式yyyy-MM-dd:月为大写MM,小写yyyy-mm-dd中mm表示分,MaskedTextBox控件,MaskedTextBox的重要属性和事件,MaskedTextBox控件范例,【例10-6】新增用户窗体中,要求电话号码的显示格式为(xxxx)xxxxxxx。如果用户输入非法数据,显示提示信息 将MaskedTextBox控件从“工具箱”中拖到窗体上。 在“属性”窗口中,选择“Mask”属性,并单击属性名称旁边的 按钮。 在“输入掩码”对话框中,在掩码文本框,录入(
11、0000)0000000。 在“属性”窗口中,将BeepOnError属性设置为true。 将ToolTip控件从“工具箱”中拖到窗体上。 在MaskedTextBox控件的MaskInputRejected事件中编写代码:,private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e) toolTip1.ToolTipTitle = 非法输入; / 提示持续五秒 toolTip1.Show(对不起,只能输入0-9, maskedTextBox1, maskedTextBox1
12、.Location, 5000); ,任务实施,方法1:使用ErrorProvider控件 方法2:提交前统一检查,使用ErrorProvider控件代码分析,在文本框txtLogInId的Validating事件编写代码 。 在文本框txtLogInPwd(密码)的Validating事件编写代码选择txtLogInId_Validating事件。,private void txtLogInId_Validating(object sender, CancelEventArgs e) / 要求必须输入 if (sender.GetType() = typeof(TextBox)/文本框检查
13、if (TextBox)sender).Text.Trim() = )/文本框未输入 errorProvider1.SetError(TextBox)sender, “必须输入数据!”); e.Cancel = true; return; else errorProvider1.SetError(TextBox) sender, ); ,使用ErrorProvider控件代码分析,在组合框cboLogInType的Validating事件编写代码 。,private void cboLogInType_Validating(object sender, CancelEventArgs e) i
14、f (cboLogInType.Text.Trim() = ) errorProvider1.SetError(cboLogInType, 必须选择用户类别!); e.Cancel = true; else errorProvider1.SetError(cboLogInType, ); ,窗体范围内验证,编写一个方法,进行所有控件的验证。 在单击【登录】按钮时,调用所有控件验证的方法,private bool ValidateInput() foreach (Control control in Controls) control.Focus();/ 在控件上设置焦点 / 验证导致引发控件的
15、验证事件,如果 CausesValidation 为 True if (!Validate() return false; return true; ,private void btnLogIn_Click(object sender, EventArgs e) / 如果用户输入验证通过,则进行用户身份验证 if (ValidateInput() ,提交前统一检查,在很多数据库应用系统中,是在数据保存或提交前统一检查数据是否合法。,private bool ValidateInput() if (txtLogInId.Text.Trim() = ) MessageBox.Show(请输入用户名
16、, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtLogInId.Focus(); return false; else if (txtLogInPwd.Text.Trim() = ) MessageBox.Show(请输入密码, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtLogInPwd.Focus(); return false; else if (cboLogInType.Text.Trim() = ) MessageBox.Show(请
17、选择登录类型, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); cboLogInType.Focus(); return false; else return true;,任务二 实现“成绩录入”验证,任务描述:,任务分析:,周丽测试成绩录入模块时,发现输入负分居然能保存正确,并且在成绩表中发现很多非法数据,成绩表存在的问题有:非法学号、非法课程号、非法成绩(例如160分、-50等)等。周丽提交测试记录后,大宝经理指出,要保证不能在什么条件下,都不能允许这些数据出现(即使开发员使用Management Studio),而且要在用
18、户录入非法数据时,就马上反馈给用户。,1要保证直接使用Management Studio修改数据都不能出现上诉非法数据,要使用数据层验证: 唯一性:(学号、姓名)。 期末成绩、平时成绩、总评成绩:在0-100之间。 学号必须为学生表中已有的学生学号。 课程号必须为课程表中已有的课程编号。 2在用户录入非法数据时直接将提示信息反馈给用户,使用表示层验证,可以使用表示层的Validating事件判断成绩的有效性,而依赖关系关系(学号、课程号)等不由学生录入,而由系统生成。,数据层验证数据,数据层验证数据,主要使用约束来数据的完整型 常用的约束类型: 主键约束(Primary Key Constra
19、int):要求主键列数据唯一,并且不允许为空 唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。 检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束 默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男” 外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的那列,添加约束,创建表后添加约束的语法:,ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 具体的约束说明,约束名的取名规则推荐采用:约束
20、类型_约束字段 主键(Primary Key)约束:如 PK_stuNo 唯一(Unique Key)约束:如 UQ_stuID 默认(Default Key)约束:如 DF_stuAddress 检查(Check Key)约束:如 CK_stuAge 外键(Foreign Key)约束:如 FK_stuNo,主键约束,在Management Studio设置主键 使用T-SQL添加主键,ALTER TABLE class ADD CONSTRAINT pk_class Primary Key(ClassID),教师演示:设置主键,唯一约束,在Management Studio添加唯一约束 使
21、用T-SQL添加唯一约束,ALTER TABLE class ADD CONSTRAINT pk_class UNIQUE (ClassName),教师演示:添加唯一约束,检查约束,在Management Studio添加检查约束 使用T-SQL添加检查约束,教师演示:添加检查约束,ALTER TABLE Student ADD CONSTRAINT ck_Student_Email CHECK (EMAIL LIKE %),默认约束,在Management Studio添加默认约束 使用T-SQL添加默认约束,ALTER TABLE Student ADD CONSTRAINT df_Stu
22、dent_LoginPWD Default (888888) FOR LoginPWD,教师演示:添加默认约束,允许空值,在Management Studio设置数据表的某列不允许为空,教师演示:设置某列不允许为空,DataGridView的Validating事件验证数据,在DataGirdView的单元格Validating事件实现验证数据,验证某列必填:,private void dataGridView1_CellValidating(object sender,DataGridViewCellValidatingEventArgs e) if (dataGridView1.Colum
23、nse.ColumnIndex.Name = 列名) if (e.FormattedValue.ToString() = String.Empty) dataGridView1.Rowse.RowIndex.ErrorText =错误信息; e.Cancel = true; ,任务实施,1为成绩表添加约束 2表示层验证数据,为成绩表添加约束,-主键约束 Alter Table Score Add Constraint pk_score Primary Key(ID) -唯一约束 Alter Table Score Add Constraint uq_score Unique(Studentno
24、, SubjectID) -默认约束 Alter Table Score Add Constraint uq_score_Score1 Default(0) For Score1 Alter Table Score Add Constraint uq_score_Score2 Default(0) For Score2 Alter Table Score Add Constraint uq_score_Score3 Default(0) For Score3 -检查约束 Alter Table Score Add Constraint ck_score_Score1 Check(Score1
25、= 0 and Score1 = 0 and Score2 = 0 and Score3 = 100) -外键约束 Alter Table Score Add Constraint fk_score_studentno FOREIGN KEY(Studentno) REFERENCES 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 (dataGridVie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ui课程设计聊天简介
- 同态加密算法设计课程设计
- 免疫组化实验员岗位考试试卷及答案
- 美甲美睫师岗位招聘考试试卷及答案
- 路径规划算法工程师考试试卷及答案
- 2026年中秋节假期幼儿园假期结束开心返园
- 居家床上螨虫滋生预防定期清洁技巧
- 文化节方案范本
- 2026年中秋节假期幼儿园月亮为什么会变圆
- 2026年中秋节假期初中假期志愿服务体验
- 2026年湖南湘西自治州州直事业单位招聘考试笔试试卷附答案
- 第3课时 认识更大的数2026-2027学年北师大版四年级数学上册
- 新版2026秋新教科版科学六年级上册全册核心素养教案教学设计合集
- 2026年秋新教材统编版小学语文一年级上册教学计划及进度表
- (2025年)龙港市辅警考试试卷真题带答案
- 2026年郑州财税金融职业学院教师招聘考试备考试题及答案解析
- 2026年中医技术操作综合提升练习试题附完整答案详解(夺冠)
- 缓解入园焦虑教师培训
- 老年性肺炎科普
- 网红直播带货合作协议模板(2026版)
- TCS-贵州分布式电力交易实施指南
评论
0/150
提交评论