资源描述
ZJWCHC数据库操作数据库操作第第14章章2回顾回顾ADO.NET 的功能和组成的功能和组成使用使用 Connection 对象连接到数据库对象连接到数据库使用使用 Command 对象查询单个值对象查询单个值,调用调用ExecuteScalar()方法方法检查以下代码的错误:检查以下代码的错误:string constr=Data Source=.;Initial Catalog=MySchool;User ID=sa;SqlConnection con=new SqlConnection();con.Open();/操作数据库代码省略操作数据库代码省略Con.Close();3回顾回顾 检查代码错误:检查代码错误:sql=select count(*)from admin where loginid=loginId and loginpwd=loginpwd;SqlCommand cmd=new SqlCommand(sql);cmd.Parameters.AddWithValue(loginid,txtLogInId.Text.Trim();cmd.Parameters.AddWithValue(loginpwd,txtLogInPwd.Text.Trim();con.Open();int cnt=(int)cmd.ExecuteScalar();con.Close();if(cnt=1)MessageBox.Show(欢迎登录欢迎登录);mainform mainfrm=new mainform();this.Hide();mainfrm.ShowDialog();else MessageBox.Show(用户名或密码不存在!用户名或密码不存在!);SqlCommand cmd=new SqlCommand(sql,con);con.Open();4本章目标本章目标掌握使用掌握使用CommandCommand与与DataReaderDataReader对象对数据库进对象对数据库进行查询操作行查询操作掌握使用掌握使用CommandCommand进行更新、删除、插入操作进行更新、删除、插入操作掌握列表视图掌握列表视图ListViewListView控件的使用方法控件的使用方法514.1DataReader对象对象问题:问题:通过班级统计人数时,班级编号(或班级名称)输入非常麻烦。通过班级统计人数时,班级编号(或班级名称)输入非常麻烦。解决方法:解决方法:在在class表中存在班级编号或名称,可以采用表中存在班级编号或名称,可以采用DataReader对对象直接从数据库中读出来在组合框中显示。象直接从数据库中读出来在组合框中显示。DataReader对象对象:DataReader对象用于从数据源中读取向前对象用于从数据源中读取向前的、只读数据流,是一个简易的数据集,使用它读取记录时通常的、只读数据流,是一个简易的数据集,使用它读取记录时通常比从比从DataSet更快。更快。DataReader对象是对象是Command对象的对象的ExecuteReader方法从数据源中检索数据时创建的。方法从数据源中检索数据时创建的。6操作步骤操作步骤步骤:1、定义定义 SQL 语句语句2、创建、创建 Command 对象对象3、打开连接、打开连接4、创建DataReader对象,并获取执行命令所执行命令所得的数据得的数据5、关闭连接、关闭连接7DataReader 对象对象每次读取一行数据每次读取一行数据命名空间命名空间对应的对应的 DataReader 对象对象System.Data.SqlClient SqlDataReaderSystem.Data.OleDbOleDbDataReaderSystem.Data.Odbc OdbcDataReaderSystem.Data.OracleClientOracleDataReader8DataReader创建和使用1)DataReader对象的创建 SqlDataReader r=cmd.ExecuteReader();2)DataReader.read()方法:移到下一行并读此行.函数返回bool型。若读出的行有数据则返回true.3)DataReader对象的使用方法 Command对象的ExecuteReader方法.返回一个SqlDataReader对象或OleDbDataReader对象.主要用于查询9使用使用 DataReader 查询数据查询数据添加班级组合框中的班级编号添加班级组合框中的班级编号处理窗体处理窗体 Load 事件事件使用使用 DataReader 读取班级编号读取班级编号10示例示例1 代码分析代码分析关键代码回顾:关键代码回顾:/创建创建SQL语句语句/创建创建command对象对象/打开连接打开连接/执行查询执行查询SqlDataReader dataReader=command.ExecuteReader();string classname=“”;/班班级名称级名称/循环读出所有的班级名,并添加到班级列表框中循环读出所有的班级名,并添加到班级列表框中while(dataReader.Read()classid=(string)dataReader0;cboclass.Items.Add(classid);/cboclass为组合框为组合框dataReader.Close();/关闭连接关闭连接循环读取数据行循环读取数据行添加到组合框中添加到组合框中11DataReader 的主要成员的主要成员属性属性说明说明HasRows 是否返回了结果是否返回了结果方法方法说明说明 Read前进到下一行记录前进到下一行记录Close关闭关闭 DataReader 对象对象DataReader 的主要成员:的主要成员:12DataReader 使用步骤小结使用步骤小结使用使用 DataReader 检索数据的步骤:检索数据的步骤:1、创建、创建 Command 对象对象2、调用、调用 ExecuteReader()创建创建 DataReader 对象对象3、使用、使用 DataReader 的的 Read()方法逐行读取方法逐行读取数据数据4、读取某列的数据,、读取某列的数据,(type)dataReader 5、关闭、关闭 DataReader 对象对象获取某列的值:获取某列的值:方法一:指定列的索引,从方法一:指定列的索引,从0开始开始方法二:指定列名方法二:指定列名注意:注意:DataReader 使用后必须关闭使用后必须关闭13示例示例2:按班级编号查询班级信息:按班级编号查询班级信息编写组合框的编写组合框的SelectedIndexChanged事件事件根据组合框中选值,根据组合框中选值,读取该班的名称、班读取该班的名称、班主任主任并统计选中班级的人并统计选中班级的人数数14示例示例2 代码分析代码分析关键代码回顾:关键代码回顾:string sql=string.Format(select class_name,monitor from class where class_id=0“,cboclass.Text);/创建创建command对象对象/打开连接打开连接/执行查询执行查询SqlDataReader dr=cmd.ExecuteReader();/循环读出指定的班级名,并添加到班级列表框中循环读出指定的班级名,并添加到班级列表框中if(dr.HasRows)dr.Read();textBox1.Text=dr0.ToString();textBox2.Text=dr1.ToString();dr.Close();/关闭连接关闭连接读取指定班级的班级读取指定班级的班级名称和班主任名称和班主任15SQL语句说明语句说明:1.参数查询参数查询string sqlstr=select*from class where class_id=classid;cmd.Parameters.AddWithValue(classid,comboBox1.Text);2.文本字符串查询文本字符串查询按按class_id号号(字符型字段或日期型字段)查询字符型字段或日期型字段)查询:string sqlstr=select*from student where class_id=+”+textBox1.Text+”;或或string sqlstr=string.Format(select*from student where class_id=0“,textBox1.Text.Trim();按成绩(数值型字段)查询按成绩(数值型字段)查询:string sqlstr=select*from student_course where grade=+textBox1.Text;或或string sqlstr=string.Format(“select*from student_course where grade=0”,textBox1.Text);16课堂练习课堂练习从部门表中,根据部门名称读取该部门的所有信息及教从部门表中,根据部门名称读取该部门的所有信息及教师人数师人数17课后练习课后练习若用户类型为学生,则从若用户类型为学生,则从Student表中,根据学号读表中,根据学号读取该学生用户的所有信息取该学生用户的所有信息注意:出生日期为注意:出生日期为DateTimePicker控件,由控件,由Value获取选中的日期值,为获取选中的日期值,为DateTime类型类型1814.2操作数据操作数据应用程序应用程序毛毛,浙江水专,良好毛毛,浙江水专,良好 毛毛毛毛姓名:姓名:学校:学校:浙江水专浙江水专成绩:成绩:良好良好如何对数据库的数据进行如何对数据库的数据进行增删改增删改?使用使用 ExecuteNonQuery()方法方法数数数数 据据据据 库库库库19操作数据示例操作数据示例怎样新增学生?怎样新增学生?处理处理“保存保存”按钮的按钮的 Click事件事件使用使用 ExecuteNonQuery()方法向数据库增方法向数据库增加记录加记录20操作数据示例操作数据示例1代码分析代码分析关键代码回顾:关键代码回顾:/创建创建command对象对象SqlCommand cmd=new SqlCommand(sql,DBoption.connection);/打开数据库连接打开数据库连接DBoption.connection.Open();/执行命令执行命令int result=comd.ExecuteNonQuery();返回受影响记录的行数返回受影响记录的行数21操作数据示例操作数据示例1代码分析代码分析/性别数据转换性别数据转换 int sex=1;if(!rdoMale.Checked)sex=0;/创建创建SQL字符串字符串string sql=string.Format(insert into student(student_id,student_name,sex,birth,class_id,home_addr)values(0,1,2,3,4,5),txtStudentNO.Text.Trim(),txtStudentName.Text.Trim(),sex,dtpbirth.Value,cboclass.Text.Trim(),txtaddr.Text.Trim();/创建创建command对象对象SqlCommand cmd=new SqlCommand(sql,DBoption.connection);/打开数据库连接打开数据库连接DBoption.connection.Open();/执行命令执行命令int i=cmd.ExecuteNonQuery();/关闭连接关闭连接DBoption.connection.Close();if(i0)MessageBox.Show(添加学生信息成功添加学生信息成功);else MessageBox.Show(添加学生信息失败添加学生信息失败);2223SQL参数字符方法:参数字符方法:string sql=insert into student(student_id,student_name,sex,birth,class_id,home_addr)values(studentid,studentname,sex,birth,classid,homeaddr);SqlCommand cmd=new SqlCommand(sql,DBoption.connection);cmd.Parameters.AddWithValue(studentid,txtStudentNO.Text.Trim();cmd.Parameters.AddWithValue(studentname,txtStudentName.Text.Trim();cmd.Parameters.AddWithValue(sex,rdoMale.Checked);cmd.Parameters.AddWithValue(birth,dtpbirth.Value);cmd.Parameters.AddWithValue(classid,cboclass.Text.Trim();cmd.Parameters.AddWithValue(homeaddr,txtaddr.Text.Trim();try DBoption.connection.Open();cmd.ExecuteNonQuery();DBoption.connection.Close();MessageBox.Show(添加学生信息成功添加学生信息成功);catch(Exception ex)MessageBox.Show(ex.Message);DBoption.connection.Close();24ExecuteNonQuery()方法小结方法小结该方法该方法执行执行指定的指定的 sql 语句语句返回返回受影响的行数受影响的行数使用使用 ExecuteNonQuery()的步骤小结:的步骤小结:1、创建、创建 Connection 对象对象2、定义、定义sql 语句语句3、创建、创建 Command 对象对象4、执行、执行 ExecuteNonQuery()方法方法5、根据返回的结果进行处理、根据返回的结果进行处理25课堂练习课堂练习1:编写一个添加学生班级的窗体编写一个添加学生班级的窗体26课堂练习课堂练习2修改和删除数据修改和删除数据怎样修改和删除班级?怎样修改和删除班级?处理处理“修改修改”按钮的按钮的 Click事件事件处理处理“删除删除”按钮的按钮的 Click事件事件使用使用 ExecuteNonQuery()方法向数据库更新记录方法向数据库更新记录27操作数据库总结操作数据库总结操作数据库相关对象操作数据库相关对象相关对象相关对象用途用途Connection 对象对象连接数据库连接数据库Command 对象对象执行执行 SQL 命令命令DataReader 对象对象读取查询结果中的数据读取查询结果中的数据28使用命令操作数据库使用命令操作数据库使用使用 Command 对象对象检索检索数据库的步骤数据库的步骤创建查询用创建查询用 sql 语句语句创建创建 Connection 对象对象创建创建 Command 对象对象返回返回 DataReader 对象对象使用使用 DataReader 的的 Read()方法逐行读取结果方法逐行读取结果使用使用列名或列的索引从列名或列的索引从 DataReader 中中获取某列的值获取某列的值返回单个值返回单个值执行执行 ExecuteReader()方法方法执行执行 ExecuteScalar()方法方法29使用命令操作数据库使用命令操作数据库使用使用 Command 对象对象更改更改数据库的步骤数据库的步骤创建创建 sql 语句语句Insert、Update、Delete创建创建 Connection 对象对象创建创建 Command 对象对象返回受影响的行数返回受影响的行数执行执行 ExecuteNonQuery()方法方法30综合案例综合案例要求通过列表视图显示管理员用户的信息要求通过列表视图显示管理员用户的信息要求能实现添加、删除、修改管理员的操作要求能实现添加、删除、修改管理员的操作31提示:提示:1、通过、通过DataReader对象读出管理员所有信息,对象读出管理员所有信息,放在列表视图放在列表视图ListView显示显示2、在下面文本框中显示列表视图选定的用户信、在下面文本框中显示列表视图选定的用户信息息3、分别执行添加、修改和删除操作、分别执行添加、修改和删除操作32控件进阶控件进阶列表视图控件列表视图控件ListView:列表视图控件:列表视图控件以特定样式或视图类型显示列表项以特定样式或视图类型显示列表项33 ListView 控件属性和方法控件属性和方法属性属性说明说明Columns“详细信息详细信息”视图中显示的列视图中显示的列SelectedItems选中的项的集合选中的项的集合GridLines指示在是否显示网格线指示在是否显示网格线 FullrowSelect单击某项时,只选择该项,还是选整行单击某项时,只选择该项,还是选整行View指定显示五种视图中的哪一种视图指定显示五种视图中的哪一种视图LargeImageList设置大图标视图显示的图标设置大图标视图显示的图标事件事件说明说明SelectedIndexChanged选中的项发生变化时激发选中的项发生变化时激发方法方法说明说明Clear()移除移除ListView中的所有项中的所有项ListView 控件的主要属性和方法:控件的主要属性和方法:ListView 控件名的前缀是“lvw“34列表视图项、子项列表视图项、子项列的集合列的集合Columns项的集合项的集合Items列表视图项列表视图项ListViewItem列表视图项的子项列表视图项的子项ListViewSubItem子项的集合子项的集合SubItems35Columns集合和集合和 Column 对象对象Columns 属性属性:表示控件中出现的所有列标题表示控件中出现的所有列标题的集合的集合ColumnHeader列标题是列标题是 ListView 控件中控件中包含标题文本的一个项包含标题文本的一个项ColumnHeader对象定义在控件的对象定义在控件的 View 属属性设置为性设置为“Details”值时,作为值时,作为 ListView 控控件的一部分显示的那些列件的一部分显示的那些列 如果如果 ListView 控件没有没有任何列标题,并控件没有没有任何列标题,并且且 View 属性设置为属性设置为 Details,则,则 ListView 控件不显示任何项控件不显示任何项36添加列标题添加列标题方法一:设置ListView对象的Columns属性方法三:lvwclass.Columns.Add(“班级编号,60,HorizontalAlignment.Right);添加多个列应该如何做?方法二:ColumnHeader objHeader=new ColumnHeader();objHeader.Text=“班级编号;objHeader.TextAlign=HorizontalAlignment.Center;objHeader.Width=100;lvwclass.Columns.Add(objHeader);37项集合和项对象项集合和项对象ListView 控件的控件的 Items 属性:表示包含控件属性:表示包含控件中所有项的集合中所有项的集合 该该属性返回属性返回 ListView.ListViewItemCollection,可以,可以用于用于 ListView 中添加新项、中添加新项、删除删除项或计算可用项或计算可用项数项数 38添加记录添加记录ListViewItem lstItem=new ListViewItem();lstItem.SubItems.Clear();lstItem.SubItems0.Text=dr“class_id.ToString();/第0列lstItem.SubItems.Add(dr“class_name.ToString();/第1列 。lstItem.SubItems.Add(dr“monitor.ToString();/第n列lvwclass.Items.Add(lstItem)实例化一个ListViewItem设置各列的数值将定义好的数值添加到ListView里面添加多行数据怎么办?39列表视图创建步骤列表视图创建步骤1、添加、添加SplitContainer容器控件容器控件属性属性Orientation为水平为水平Dock属性为属性为fill2、添加两个、添加两个imagList控件控件iml1,iml2分别添加一个图像(分别添加一个图像(16*16,32*32)3、添加、添加ListView控件控件设置设置Column属性,添加三列属性,添加三列Dock属性为属性为fillView属性为属性为DetailsMultiSelect属性为属性为FalseGridLines属性为属性为TrueFullrowSelect属性为属性为TrueSmallImageList属性为属性为iml1LargImageList属性为属性为iml240例例3 代码分析代码分析关键代码回顾关键代码回顾查询信息查询信息:/执行查询用户命令执行查询用户命令dataReader dr=command.ExecuteReader();while(dr.Read()/读取各列的数据读取各列的数据 loginId=(string)drLoginId;/向向 ListView 中添加记录中添加记录dr.Close();/关闭关闭 DataReader 对象对象回顾回顾 DataReader 的使用步骤的使用步骤41示例示例3 代码分析代码分析关键代码回顾关键代码回顾添加记录到添加记录到 ListView:/创建一个创建一个ListView项项ListViewItem li=new ListViewItem(class_id,0);/向当前项中添加子项向当前项中添加子项li.SubItems.AddRange(new string studentName,studentNO,userState);/向向ListView中添加一个新项中添加一个新项lvclass.Items.Add(li);创建列表视图项创建列表视图项,0设定设定图像图像添加列表视图项添加列表视图项添加列表视图项的子项添加列表视图项的子项42快捷菜单控件快捷菜单控件ContextMenuStrip 弹出菜单控件弹出菜单控件创建步骤:创建步骤:1、添加、添加ContextMenuStrip菜单控件菜单控件2、添加菜单选项如:大图标、小图标、详细、添加菜单选项如:大图标、小图标、详细列表列表3、编写各菜单选项、编写各菜单选项click事件代码事件代码如大图标:如大图标:4、设置列表视图的、设置列表视图的ContextMenuStrip 属属性,建立其他控件与快捷菜单关联性,建立其他控件与快捷菜单关联43列表视图显示所有信息代码列表视图显示所有信息代码44快捷菜单关键代码快捷菜单关键代码45详细信息显示代码详细信息显示代码46在在DBoption类中编写一个统一更新记录的方法类中编写一个统一更新记录的方法47添加按钮代码添加按钮代码48删除按钮代码删除按钮代码49修改按钮代码修改按钮代码50习题习题将课堂练习做完将课堂练习做完请做一个按班级编号查询该班所有学生信息的请做一个按班级编号查询该班所有学生信息的窗体窗体
展开阅读全文