数据库原理第九讲WinForm数据库设计蒲飞本次课目标熟练使用ADO.net操作数据库熟练使用Winform中的高级控件treeview\listview绑定数据库高级用法熟练利用DataGridView绑定数据及其高级应用使用ADO.net操作图片及事务的高级应用熟练使用ADO.net+Winform+SQLServer2008R2开发数据库应用程序知识点Winform数据库编程知识点:1、ADO.net内置对象详解(Connection\Command\DataReader\DataAdapter)2、ADO.net封装DBHelper类完整应用3、利用ADO.net操作数据4、ADO.net4.0高级用法:使用DataReader装载DataTable处理并发DataSet中的搜索数据集ADO.net处理流数据(图片、视频、word文档等)5、使用事务6、TreeView\ListView\DataGridView与数据库的绑定7、DataGridView的高级用法链接列、图片列、复选框列、自定义列等高级用法ADO.NET概述数据库使用数据库存储数据SQLServerMySQLORACLE数据库访问的方法和技术ADO.NET的主要组件ADO.NETDataSet(数据集).NETFramework数据提供程序只进、只读访问数据独立于数据源的数据访问ADO.NET操作数据库结构图本课内容.NET数据提供程序类型.NETFramework数据提供程序说明SQLServer.NET数据提供程序MicrosoftSQLServer数据源System.Data.SqlClient命名空间OLEDB.NET数据提供程序OLEDB公开的数据源System.Data.OleDb命名空间ODBC.NET数据提供程序ODBC公开的数据源System.Data.Odbc命名空间Oracle.NET数据提供程序Oracle数据源System.Data.OracleClient命名空间为什么使用Connection应用程序数据源请求数据Connection桥梁连接数据库示例连接到本机的Scott数据库演示示例1:测试Scott数据库连接示例1代码分析//数据库连接字符串stringconnString=DataSource=.;InitialCatalog=Scott;UserID=sa;pwd=123456;//创建Connection对象SqlConnectionconnection=newSqlConnection(connString);//打开数据库连接connection.Open();MessageBox.Show(打开数据库连接成功);//关闭数据库连接connection.Close();MessageBox.Show(关闭数据库连接成功);表示本机或为server或为database或为uidStringconnString=“Server=.;database=MySchool;integratedsecurity=true”Connection主要成员必须显式关闭连接属性说明ConnectionString连接字符串方法说明Open打开数据库连接Close关闭数据库连接连接数据库步骤1、定义连接字符串2、创建Connection对象3、打开与数据库的连接DataSource=服务器名;InitialCatalog=数据库名;UserID=用户名;Pwd=密码SqlConnectionconnection=newSqlConnection(connString);连接字符串connection.Open();没有密码,可省略Connection对象命名空间对应的Connection对象System.Data.SqlClientSqlConnectionSystem.Data.OleDbOleDbConnectionSystem.Data.OdbcOdbcConnectionSystem.Data.OracleClientOracleConnection不同命名空间的Connection对象使用异常处理应用程序打开数据库处理数据……数据源与数据库的连接中断无法打开数据库无法操作数据出现意外错误!出现异常异常处理异常:在运行时发生的错误异常处理:预知可能发生的异常,在程序中编码处理操作数据库时可能发生异常:无法打开数据库无法读取数据数据操作出错……如何处理异常使用try…catch块捕获和处理异常try{connection.Open();//……connection.Close();}catch(处理的异常类型){//错误处理代码}处理异常的代码出现异常,跳到catch否则正常向下执行出现异常跳转连接关闭语句将不被执行包含可能出现异常的代码如何处理异常finally块——无论是否发生异常,都会执行try{connection.open();//……}catch(处理的异常类型){}finally{connection.Close();}可能出现异常的代码处理异常的代码是否发生异常数据库连接都会关闭必须执行的语句放在finally中无论如何都会执行的代码处理异常connection.Open();MessageBox.Show(打开数据库连接完毕);connection.Close();MessageBox.Show(关闭数据库连接完毕);修改示例1的代码,增加try语句块演示示例2:使用try…catch…finally小结如果try中没有出现异常,显示哪几个消息框?try{//…可能出现异常的代码MessageBox.Show(try块);}catch(Exceptione){MessageBox.Show(catch块);}finally{MessageBox.Show(finally块);}显示显示不显示使用Command应用程序打开数据库处理数据……数据源Connection怎样处理数据执行命令并从数据源中返回结果Command的主要成员属性说明ConnectionCommand对象使用的数据库连接CommandText执行的SQL语句方法说明ExecuteNonQuery执行不返回行的语句,如UPDATE等ExecuteReader返回DataReader对象ExecuteScalar返回单个值,如执行COUNT(*)使用Command步骤使用Command步骤:1、创建数据库连接2、定义SQL语句3、创建Command对象4、执行命令SqlConnectionconnection=newSqlConnection(connString);stringsql=SELECTCOUNT(*)FROMemp;connection.Open();//打开数据库连接SqlCommandcommand=newSqlCommand(sql,connection);intnum=(int)command.ExecuteScalar();示例3关键代码:执行命令前,必须打开数据库连接!返回的是Object类型数据,要进行类型转换!综合示例完成系统登录功能1、验证MySchool教师的用户名和密码是否存在2、验证通过,显示教师主窗体处理登录按钮的Click事件定义一个ValidateUser()方法需要Connection和Command对象分两步实现验证:1、建立数据库连接2、验证用户是否存在用户验证方法框架ValidateUser()方法框架1、验证的结果:通过,不通过返回值为bool型2、方法需要:用户名,密码,登录类型值方式传参3、不通过的原因:用户名或密码不存在、其他原因引用方式传参publicboolValidateUser(stringloginType,stringloginId,stringloginPwd,refstringmessage){}演示示例4:增加方法的定义和调用用户验证方法具体实现第一步:建立数据库连接增加DBHelper类第二步:查询用户是否存在◦SELECTCOUNT(*)◦ExecuteScalar()方法查询演示示例5:用户验证方法具体实现ValidateUser()方法具体实现小结//查询Student表使用的SQL语句stringsql=string.Format(SELECTCOUNT(*)FROMMyScoolWHERELogInId='{0}'ANDLogInPwd='{1}',txtLogInId,txtLogInPwd);//使用的Command对象SqlCommandcommand=newSqlCommand(sql,DBHelper.connection);DBHelper.connection.Open();//执行查询,返回找到的个数count=(int)command.ExecuteScalar();在示例5中增加验证用户的代码小结列举ADO.NET中的五个主要对象?ConnectionCommandDataReaderDataAdapterDataSet小结说明Connection、Command、DataReader、DataAdapter、DataSet各个对象的作用?答:Connection–主要用于数据库连结Command–主要用于向数据库发送指令DataReader–以只读只向前的方式读取数据库中返回的数据DataAdapter–数据适配器,在数据库与DataSet之间起到一个连结桥梁的作用DataSet–相当于客户端的内存中的数据库小贴士设置窗体中当按回车键时执行某一个按钮,可在窗体属性AcceptButton设为该按钮,这样回车时就执行该按钮动作。当按ESC键时执行某一个按钮,可在窗体属性CancelButton设为该按钮,这样按ESC键时就执行该按钮动作。关闭窗体的三种方式:1、this.Close();//关闭当前窗口2、this.Hide();//隐藏窗口,但程序还在运行中3、Application.Exit();//结束当前应用程序WinForm专用第三方换肤控件---IrisSkin2使用方法:1、先把IrisSkin2.dll文件添加到当前项目引用(解决方案资源管理器-当前项目-引用-右键-添加引用,找到IrisSkin2.dll文件。IrisSkin2.dll文件最好放在当前项目\bin\Debug文件中(项目生成时自动添加至该文件夹下)。2、然后把IrisSkin2.dll文件添加到vc2010的工具箱:右键-选择项-浏览找到IrisSkin2.dll文件(文件最好放在当前项目\bin\Debug文件中)按确定,控件就添加到工具箱中了.然后把工具箱中新添加的SkinEngine控件拖到当前项目中。3、把安装目录下Skins文件夹中的皮肤文件.ssk文件复制到当前项目\bin\Debug文件中。WinForm专用第三方换肤控件---IrisSkin24、再在项目中调用.ssk皮肤文件。例:namespace当前项目{publicpartialclassForm1:Form{publicForm1()//当前项目的构造器中调用皮肤文件{InitializeComponent();this.skinEngine1.SkinFile=DiamondBlue.ssk;//DiamondBlue.ssk可换成皮肤目录中你喜欢的.ssk文件//把.ssk复制到当前项目\bin\Debug目录中}}}WinForm专用第三方换肤控件---IrisSkin2或者在skinEngine所在窗体的代码段中添加//skinEngine1//..............this.skinEngine1.SkinFile=DiamondGreen.ssk;可用FaceChange应用程序,对各个皮肤界面进行选择。使用DataReader应用程序毛毛,北大,优秀毛毛姓名:学校:北大成绩:优秀怎样读取数据库的数据?使用DataReader对象