单元06主从表数据维护.ppt_第1页
单元06主从表数据维护.ppt_第2页
单元06主从表数据维护.ppt_第3页
单元06主从表数据维护.ppt_第4页
单元06主从表数据维护.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单元6 主从表数据维护与查询 1 回顾 查询学生成绩的SQL(学号、姓名、成绩)? 在学生表中按班级统计学生人数的SQL? 视图有什么作用? 创建视图的语法? 使用PUSH模式制作水晶报表的步骤? 2 本单元任务 任务一 完成“新增学生” 任务二 完成“成绩查询” 任务三 完成“学生选号器” 新增管理员 新增教师 新增学生 3 本单元目标 创建外键约束 向主表、从表录入数据 使用控件查询主从表数据 使用DataView对象 使用DataRelation对象 4 任务一 完成“新增学生 ”模块 任务描述: 任务分析: 模块功能:实现学生信息的添加功能。 输入项目:在窗体中录入学生的基本信息,如如学号、姓名、 地址、电话、等信息,选择所属专业、班级,单击【保存】 。 输出项目:将录入的学生信息添加到数据表Student表中。 测试要点:测试选择专业后,班级只能选择隶属于选择专业的 班级;是否能正确载入学生数据信息。 1专业与班级为一对多关系,班级与学生为一对多关系。 2学生所在班级的班级号,不能随意输入不存在的班级号。 5 外键约束 陈敏宁05多媒体15 朱婵05信管14 曾文权05软开13 段班祥 05网络编程 2 张艺谋明星班1 Manager className classID 100黄蓉 5108000099 StudentNostudentNameclassID 5108000089 张亮 1 5108000090 张利华 1 5108000091 李頔飞 1 5108000092 侯潇楠 2 5108000093 杨超 2 在外键引用中,一个表 的列被引用作为另一个 表的主键值的列 6 使用Management Studio施加外键约束 【例6-1】为MySchool数据库中的Class表与Student表添加主外键约束。 Class表中ClassId是主键,Student表中的ClassId是外键 。 1. 选择外键表(从表),右击,【修 改】 2.在表设计器中,右击,单击【关系 】 3.在“外键关系”对话框中,单击【添 加】 4.填写“表和列规范”。 5.单击【确定】 7 使用T-SQL施加外键约束 语法: ALTER TABLE 表名 ADD CONSTRAINT 约束名 Foreign Key(从表列名) REFERENCES 主表名(主表列名) 【例6-2】为MySchool数据库中的Student表和Socre表添加外键约束,其中 StudentNo是Student外的主键,是Score表的外键。 ALTER TABLE Score ADD CONSTRAINT FK_Score_Student FOREIGN KEY (StudentNo) REFERENCES Student(StudentNo) 8 主从表数据录入的问题关键 在录入时保证主从表中同一笔数据(例如订单和订单明细 )的主表主键和从表外键一致是问题的关键。 一般有两种解决方式: 1.主从表单独设计,分别录入 。 2.主从表同一界面设计,同时录入。 9 使用ComboBox 属性说明 DropDownStyle ComboBox的样式 Items说明组合框中的项 Text文本 SelectedIndex当前选定项目的索引号 SelectedItem获取当前选定的项 DataSource绑定的数据源 DisplayMember 显示列 ValueMember 值列 10 ComboBox范例 使用ComboBox来显示的班级信息,选择班级后,单击 【确定】按钮,显示班级编号。 11 代码分析 在窗体加载时将班级信息添加到ComboBox控件 : 开始按钮的Click事件代码 : private void MainFrm_Load(object sender, EventArgs e) DBHelper db = new DBHelper(); /获取班级信息,并绑定到cbxClass组合框 cbxClass.DataSource = db.getDataSet(“SELECT ClassID, ClassName from Class“). Tables0; /设置组合框的显示列 cbxClass.DisplayMember = “ ClassName“; /设置组合框的值列 cbxClass.ValueMember = “ ClassID“; private void btnStat_Click(object sender, EventArgs e) MessageBox.Show(cbxClass.SelectedValue.ToString(); 12 使用TabControl 属性说明 MultiLine是否可以显示多行选项卡 TabPages说明包含的选项卡页的集 合 SelectedIndex当前所选选项 卡页的索引 值 13 任务实施 实现“新增学生”模块 1设计界面 2. 窗体打开时显示专业信息 3. 选择某专业后,显示该专业的班级信息 4. “添加学生”的保存代码 教师实现:实现“修改密码” 学生模仿:实现“修改密码” 14 代码分析-显示专业信息 在窗体加载时将班级信息添加到ComboBox控件 : private void AddStudentForm_Load(object sender, EventArgs e) string sql = “SELECT id, specName FROM Specialty“; DBHelper db = new DBHelper(); cboSpe.DataSource = db.getDataSet(sql).Tables0; cboSpe.DisplayMember = “specName“; cboSpe.ValueMember = “id“; / 加载完成后,才根据专业显示该专业的班级 this.cboSpe.SelectedIndexChanged += new System.EventHandler( this.cboGrade_ SelectedIndexChanged); 15 代码分析-显示专业的班级信息 private void cboGrade_SelectedIndexChanged(object sender, EventArgs e) string speID = cboSpe.SelectedValue.ToString(); string sql = String.Format(“SELECT classid, className FROM class where SpecialtyID=0“, speID); DBHelper db = new DBHelper(); cboClass.DataSource = db.getDataSet(sql).Tables0; cboClass.DisplayMember = “className“; cboClass.ValueMember = “classid“; 16 代码分析-保存1 private void btnSave_Click(object sender, EventArgs e) if (ValidateInput() / 获取要插入数据库的每个字段的值 string loginId = txtLoginId.Text; / 用户名 string loginPwd = txtLoginPwd.Text; / 密码 / 根据选择的状态设置状态id string userStateId = rdoActive.Checked ? (string)rdoActive.Tag : (string) rdoInactive.Tag; string name = txtStudentName.Text; / 姓名 string studentNO = txtStudentNO.Text; / 学号 string phone = txtPhone.Text; / 电话 string email = txtEmail.Text; / 电邮 string sex = rdoMale.Checked ? “1“ : “0“;/ 性别 / 调用获取班级id的方法,获取班级id int classId = Convert.ToInt32(cboClass.SelectedValue); 17 代码分析-保存2 / 构建插入的sql语句 string sql = string.Format(“INSERT INTO Student(LoginId, LoginPwd, UserStateId, ClassID, StudentName, Sex, Phone, StudentNO, Email) values(0,1, 2,3,4, 5,6,7,8)“, loginId, loginPwd, userStateId, classId, name, sex, phone, studentNO, email); DBHelper db = new DBHelper(); if(db.updateSql(sql) MessageBox.Show(“添加成功!“, “操作提示“, MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); else MessageBox.Show(“添加失败!“, “操作提示“, MessageBoxButtons.OK, MessageBoxIcon. Warning); 18 任务二 完成“成绩查询 ”模块 任务描述: 任务分析: 模块功能:实现成绩查询功能。实现按照学号、课 程、班级组合条件进行查询,教师可以查看所有 学生的成绩信息,而学生只能查询本人的成绩信 息。 输入项目:用户类别为老师或管理员,则可在窗体 中选择班级、课程,录入学号;用户类别为学生 ,则学号固定为本人学号,且不能修改,可选择 课程;单击【确定】按钮。 输出项目:DataGridView控件中显示成绩信息。 测试要点:权限测试,学生只能查询本人成绩;能 否根据条件查询正确的结果 1. 查询条件:班级、 课程、学号为组合 查询条件。 2. 学生只能查询本人 分数,可使用 UserHelper的用户 类别、用户号,如 果登录用户为学生 ,则将该学生的学 号设置到查询文本 框,并不能修改, 就可以实现学生只 能查询本人成绩。 19 DataRelation对象 主要功能:从一个DataTable导航到另一个DataTable 学生表 成绩表 SID SID 主要体现在: 1.记录当前记录的子记录或父记录 2.强制执行约束 20 创建DataRelation 创建与添加DataRelation方法: 1. 设计器创建 2. 代码创建 21 DataRelation实现主从表导航显示 【例6-5】使用DataRelation对象实现主从表查询,实 现学生信息和该学生成绩信息的导航显示。 教师实现 学生模仿 22 关键步骤-创建DataRelation 创建DataRelation的主要步骤: 在解决方案资 源管理器中,双 击 DataSet 1 右击,选择【添加 】【Relation】 2 设置主表、 从表、键列 等关系 3 23 代码分析-加载学生和成绩数据 private void Form1_Load(object sender, EventArgs e) SqlDataAdapter da1 = new SqlDataAdapter( “select * from student“, DBHelper. connection); da1.Fill(dsStudentAndScore1, “STUDENT“); SqlDataAdapter da2 = new SqlDataAdapter( “select * from vw_SCORE“, DBHelper. connection); da2.Fill(dsStudentAndScore1, “SCORE“); 加载数据到一个DataSet中的两个DataTable。 24 代码分析-学生和成绩信息的导航 / 在dataGridView1选择学生,在dataGridView2中显示该学生的成绩 private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) DsStuAndScore.scoreRow scores; scores= (DsStuAndScore.scoreRow)dsStuAndScore1.Student.Rowse.R owIndex. GetChildRows(“FK_Student_score“); dataGridView2.DataSource = scores; 25 DataTable DataTable DataVeiw 类似数据库中的视图 提供基础 DataTable 中数据的动态视图 DataView DataSet 26 DataView 常用属性 属性名称说明 Table用于获取或设置源DataTable Sort 获取或设置 DataView 的一个或多个排序 列以及排序顺序 RowFilter 获取或设置用于筛选在 DataView 中查看 哪些行的表达式 Count 在应用RowFilter后,获取DataView中的 行数 27 创建DataView 通过设计器创建 通过代码创建 28 通过代码创建DataView 名称 说明 DataView () 初始化 DataView 类的新实例。 DataView (DataTable) 用指定的 DataTable 初始化 DataView 类的新 实例。 DataView (DataTable, String, String, DataViewRowState) 用指定的 DataTable、RowFilter、Sort 和 DataViewRowState 初始化 DataView 类的新实 例。 29 任务实施 1.编写程序 2.运行“成绩查询”模块 30 代码分析-加载成绩数据 ds = db.getDataSet(sql); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = ds.Tables0; DataView dv = ds.Tables0.DefaultView; dv.Sort = “期末成绩 desc“; 加载成绩信息,并按期末成绩逆序排列 31 代码分析-加载成绩数据 private void btnOK_Click(object sender, EventArgs e) string classID, subjectID, sWhere; classID = cbxClass.SelectedValue.ToString(); subjectID = cbxSubject.SelectedValue.ToString(); sWhere = String.Format(“subjectid=0 and classid=1“, subjectID, classID); if (txtStudentNo.Text != “) sWhere = sWhere + String.Format(“ and studentno=0“, txtStudentNo.Text); DataView dv = ds.Tables0.DefaultView; dv.RowFilter = sWhere; 查询成绩信息 32 任务三 完成“学生选号器” 任务描述: 任务分析: 模块功能:实现随机选择某学生功能。教师在课堂 上点名叫学生回答问题,为了公平起见,需要设 计一个“学生选号器”,随机选择某学生。 输入项目:在窗体中选择班级,单击【开始】按钮 ;隶属于选择班级的学生学号、姓名便随机跳动 显示在窗体上,教师单击【停止】按钮。 输出项目:随机选择的学生信息(学号、姓名)固 定不变,为选定学生。 测试要点:是否随机显示学生信息,学生信息是否 隶属于选择班级。 1学生信息跳动显示 ,可使用Timer控件 。 2随机抽取学生信息 ,可使用随机函数 产生随机数。 3随机数n生成后, 就显示第n个学生的 信息。 33 相关知识与技能 1使用Timer控件 Timer 控件是定期引发事件的组件。主要属性、方法和事件 : Interval属性:时间间隔的长度,其值以毫秒为单位。若启 用了该组件,则每个时间间隔引发一个 Tick事件。 Enable属性:Timer 控件是否生效。 Tick事件:当指定的计时器间隔已过去而且计时器处于启用 状态时发生。 2随机数 Random类:随机数生成器,一种能够产生满足某些随机性 统计要求的数字序列的类。 Random.Next (整数) :返回一个小于所指定最大值的非负 随机数。 34 任务实施 1.编写程序 2.运行“成绩查询”模块 35 代码分析-加载学生数据 /单击【开始】按钮时,获取该班级的学生信息 private void btnStart_Click(object sender, EventArgs e) / 得到班级号 string classID, sql; classID = cbxClass.SelectedValue.ToString(); sql = s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论