版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章ADO.NET数据库访问技术本章导读:本章的主要内容是学习ADO.NET数据库访问技术。然后通过项目“MyQQ的登录和注册管理”为导向,三个任务(完善用户注册窗体、完善用户登录窗体、用户信息后台管理窗体)为驱动,学习有关ADO.NET数据库访问技术,包括数据库连接对象Connection、SQL语句执行对象Command、数据读取对象DataReader等,本项目的完成将使得学习者学会数据库的访问技术,使得窗体应用程序能够与后台数据库得到交互。第9章ADO.NET数据库访问技术
——任务一完善用户注册窗体一、任务描述:使用SQLServer数据库,创建一个名为QQMessage的数据库,在QQMessage数据库下创建一个名为tb_UserMsg的表。在第8章任务二基础上,首先完成第8章的实训四,如左图所示(添加DateTimePicker控件来选择出生日期),然后修改程序,当单击【注册】按钮的时候能够向QQMessage数据库中表tb_UserMsg中保存用户注册信息(如右下图),如左图所示,并弹出如右上图所示消息框。二、知识准备:1Connection对象2Command对象二、知识准备:1、Connection对象Connection对象的主要功能是创建应用程序与数据库之间的连接,主要包括4种类型访问数据库的对象,不同类型所对应的数据提供程序不同,下表中分别列出了这4种不同的数据提供程序以及相对应的命名空间。(1)什么是Connection对象不同类型的Connection对象编号数据提供程序命名空间类型1SQLServer数据提供程序System.Data.SqlClientsqlConnection2ODBC数据提供程序System.Data.OdbcOdbcConnection3OLEDB数据提供程序System.Data.OleDbOleDbConnection4Oracle数据提供程序System.Data.OracleClientOracleConnection其中Access和MySQL数据库都是OLEDB公开的数据库。常用方式二、知识准备:1、Connection对象(2)连接数据库(以SQLServer数据库为例)1)首先通过usingSystem.Data.SqlClient引入命名空间;2)声明数据库连接字符串。例如要连接一个名为QQMessage的数据库:
stringconnString="DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456";对连接字符串的说明如下:DataSource:服务器名称,“.”或者“loacalhost”表示本地服务器。InitialCatalo:数据库的名称。UserID,pwd:表示数据库的登录名和密码,需要在数据库安装时进行配置。二、知识准备:1、Connection对象(2)连接数据库4)最后通过Open()方法打开数据库:connection.Open();State属性是ConnectionState类型的枚举值之一,其说明如表所示:ConnectionState枚举值枚举值说明Broken连接中断。可以关闭后重新打开处理这种状况。Closed连接关闭。Connecting正在连接。Executing正在执行命令。Fetching正在检索数据。Open连接打开。3)然后创建Connection对象:SqlConnectionconnection=newSqlConnection(connString);连接字符串二、知识准备:1、Connection对象(3)关闭数据库连接对数据库的操作完毕时,应该关闭与数据库的连接,释放被占用的资源。关闭数据库连接有两种方法:Close和Dispose方法。这两种关闭数据库连接方法的区别在于:Close()方法只是关闭连接,而Dispose()方法还同时清理连接所占用资源。关闭上面打开的数据库连接:connection.Close();数据库连接有打开,在后面一定有关闭。二、知识准备:2、Command对象(1)什么是Command对象Command对象是是一个数据命令对象,主要功能是向指定的数据库发送查询、修改和删除的SQL命令。根据所使用的数据库的不同,Command对象有不同的形式,主要有如下表所示的几种方式,这几种方式跟前表中不同类型的Connection对象对应使用。不同类型的Connection对象编号数据提供程序命名空间类型1SQLServer数据提供程序System.Data.SqlClientsqlCommand2ODBC数据提供程序System.Data.OdbcOdbcCommand3OLEDB数据提供程序System.Data.OleDbOleDbCommand4Oracle数据提供程序System.Data.OracleClientOracleCommand二、知识准备:2、Command对象(1)什么是Command对象在使用OracleCommand时,要引入System.Data.OracleClient命名空间,但是默认情况下没有此命名空间,所有需要将程序集System.Data.OracleClient.dll引入到项目中。定义一个Command对象:SqlCommandcommand=newSqlCommand();二、知识准备:2、Command对象(2)设置Command对象的属性Command对象有以下3个重要属性:Connection:用于设置sqlCommand的对象。CommandText:用于设置要执行的SQL语句或存储过程。CommandType:用于设置CommandText的类型。类型有StroedProcedure(存储过程名称)、TableDirect(表的名称),Text(SQL文本命名)。对上面定义的Command对象command设置属性:command.Connection=connection;command.CommandText=sql;command.CommandType=CommandType.Text;SqlCommandcommand=newSqlCommand(sql,connection);两种方式都可二、知识准备:2、Command对象(3)执行SQL语句要执行Command对象中设置的SQL语句,有以下几种常见的方法:PublicoverrideintExecuteNonQuery()该方法返回受影响的行数。在做插入功能的SQL语句时,可以用此方法来判断是否插入成功。1)ExecuteNonQuery方法。语法:二、知识准备:2、Command对象(3)执行SQL语句要执行Command对象中设置的SQL语句,有以下几种常见的方法:PublicSqlDataReaderExecuteRead()该方法返回SqlDataReader对象。2)ExecuteRead方法。语法:PublicoverrideObjectExecuteScalar()该方法返回值为结果集中第一行的第一列,当结果集为空时返回空引用。3)ExecuteScalar方法。语法:三、任务分析:1、打开SQLServer数据库,新建数据库QQMessage,新建表tb_UserMsg,表结构如下表所示:表tb_UserMsg列名数据类型是否允许为空说明Namestring否用户姓名(主键)Birthdaystring是用户生日Passwordstring否登录密码Sexstring是用户性别Agestring是用户年龄Provincestring是用户籍贯Interestingstring是用户兴趣Description,string是用户描述Imgstring是头像保存路径三、任务分析:2、要执行的SQL语句如下:stringsql=String.Format("insertintotb_UserMsgvalues('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",name,birthday,password,age,sex,province,interesting,description,photopath);在对表进行插入操作时,要注意表的列结构,插入值的前后顺序应该跟表中列的前后顺序一致。3、SqlCommand对象采用ExecuteNonQuery()方法执行SQL语句,目的是为了根据返回受影响的行数判断注册是否成功。四、任务实施:1、打开SQLServer,新建一个名为QQMessage的数据库,名为tb_UserMsg的数据表。四、任务实施:2、修改【注册】按钮的Click事件处理程序,在后面添加如下代码://把注册信息存入数据库stringconnString="DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456";SqlConnectionconnection=newSqlConnection(connString);stringsql=String.Format("insertintotb_UserMsgvalues('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",name,birthday,password,age,sex,province,interesting,description,photopath);
connection.Open();
SqlCommandcommand=newSqlCommand();command.Connection=connection;command.CommandText=sql;command.CommandType=CommandType.Text;数据库连接字符串创建Connection对象执行的SQL语句打开连接command对象设置四、任务实施:2、修改【注册】按钮的Click事件处理程序,在后面添加如下代码://返回受影响的行数,如果num>0表示插入信息成功
intnum=command.ExecuteNonQuery();if(num>0){MessageBox.Show("用户注册成功!");stringmsg=name+"\r\n"+birthday+"\r\n"+age+"\r\n"+sex+"\r\n"+province+"\r\n"+interesting+"\r\n"+description+"\r\n"+photopath+"\r\n";
msgmessage=newmsg(msg);message.Show();message.Owner=this;}else{MessageBox.Show("用户注册失败!");}//关闭数据库连接
connection.Close();实例化注册信息显示窗体,利用构造函数参数传递数据五、任务小结:SqlCommandcommand=newSqlCommand();command.Connection=connection;command.CommandText=sql;command.CommandType=CommandType.Text;SqlCommandcommand=newSqlCommand(sql,connection);1、设置Command对象的两种方法:(1)通过属性设置(2)在定义Command对象的时候直接设置,通常采用这种方式:2、当对数据库表执行插入操作时,如果需要验证插入是否成功,采用ExecuteNonQuery()方法执行SQL语句。第9章ADO.NET数据库访问技术
——任务二完善用户登录窗体
一、任务描述:对第8章任务二中的用户登录窗体进行修改。如下所示:用户名:admin密码:123456用户名和密码存在表tb_UserMsg中,弹出消息框“***,欢迎登录!”一、任务描述:如果是用户名错误,则弹出消息框“用户名不存在!”,如左图所示,如果是密码错误,则弹出消息框“用户密码错误!”,如右图所示。二、知识准备:1DataReader对象二、知识准备:1、DataReader对象DataReader对象是数据读取对象,它提供向前只读的游标,如果应用程序只需要快速读取数据,可以使用DataReader进行读取。下表中列出了不同类型的DataReader。(1)什么是DataReader对象不同类型的DataReader对象编号数据提供程序命名空间类型1SQLServer数据提供程序System.Data.SqlClientsqlDataReader2ODBC数据提供程序System.Data.OdbcOdbcDataReader3OLEDB数据提供程序System.Data.OleDbOleDbDataReader4Oracle数据提供程序System.Data.OracleClientOracleDataReader二、知识准备:1、DataReader对象publicoverrideboolHasRows{get;}(2)HasRows属性HasRows属性用于判断sqlDataReader中是否包含了值。语法如下:如果有值属性值为true,没有值属性值为false。(3)Read方法Read方法的功能是使sqlDataReader前进到下一条记录。语法如下:publicoverrideboolRead()如果存在记录则返回值为true,否则为false。三、任务分析:1、查看输入的用户名是否存在的SQL语句:selectNamefromtb_UserMsgwhereName='"+tb_name.Text.Trim()+"'";当查询的结果集里面有行时,表明用户名存在。2、首先保存结果集中的Name,然后比较密码是否正确。四、任务实施:1、打开第8章任务二中建立的窗体应用程序,修改【登录】按钮的Click事件处理程序。privatevoidbtn_login_Click(objectsender,EventArgse)//用户登录
{
//数据库连接字符串stringconnString="DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456";//创建Connection对象
SqlConnectionconnection=newSqlConnection(connString);stringsql="select*fromtb_UserMsgwhereName='"+tb_name.Text.Trim()+"'andPassword='"+tb_psd.Text.Trim()+"'";connection.Open();//打开数据库连接
SqlCommandcommand=newSqlCommand(sql,connection);黑色部分保持以前不变四、任务实施:1、打开第8章任务二中建立的窗体应用程序,修改【登录】按钮的Click事件处理程序。
//使用ExecuteReader方法创建SqlDataReader对象
SqlDataReadersdr=command.ExecuteReader();if(sdr.HasRows){MessageBox.Show(tb_name.Text+",欢迎登录!");}else{MessageBox.Show("登录失败!");}//关闭数据库连接
connection.Close();}此部分做修改判断用户名和密码是否存在数据表橙色部分在后面继续修改四、任务实施:2、修改登录失败提示,明确是到底用户名不存在还是密码错误。当用户名不存在时,出现如图所示消息框。四、任务实施:2、修改登录失败提示,明确是用户名不存在还是密码错误。修改(1)中else中的代码(橙色部分)如下:SqlConnectionconnection2=newSqlConnection(connString);connection2.Open();sql="selectNamefromtb_UserMsgwhereName='"+tb_name.Text.Trim()+"'";SqlCommandcommand2=newSqlCommand(sql,connection2);command2.CommandText=sql;stringfindname="";findname=Convert.ToString(command2.ExecuteScalar());if(findname==tb_name.Text){MessageBox.Show("用户密码错误!");}else{MessageBox.Show("用户名不存在!");}connection2.Close();获得用户名用户名存在用户名不存在五、任务小结:1、利用SqlDataReadersdr=command.ExecuteReader()得到结果集,然后利用dr.HasRows判断结果集里是否包含行来确定登录成功与否。2、重新查询需要重新创建连接。第9章ADO.NET数据库访问技术
——任务三用户信息后台管理窗体
一、任务描述:在任务二基础上新增一个窗体,如图所示。在此窗体中包含1个DataRowView控件和2个Button控件。在DataRowView控件中显示数据库QQMessage中表tb_UserMsg的全部信息。单击【删除】按钮可以在表中删除被选中行,单击【提交更改】按钮向数据库中表tb_UserMsg提交修改或删除后的用户信息。二、任务准备:1、DataAdapter对象DataAdapter对象叫做数据适配器对象,是DataSet与数据源之间的桥梁。该对象提供了4个重要的属性,实现与数据库之间的互通,如表所示。DataAdapter对象常用属性属性说明SelectCommand从数据库检索数据的Command对象DeleteCommand从数据库删除数据的Command对象InsertCommand从数据库插入数据的Command对象UpdateCommand从数据库更新数据的Command对象二、任务准备:1、DataAdapter对象在对数据库进行操作时,该对象还提供了几个主要的方法,如表所示:DataAdapter对象常用方法方法语法说明FillpublicintFill(DataSetds,stringscrTable)ds:表示要填充的数据集。scrTable:表示源表的名称。返回值:在DataSet中成功添加或刷新的行数。UpdatepublicintUpdate(DataTabedt)dt:更新数据源的DataTabe。返回值:在DataSet中成功更新的行数。二、任务准备:2、DataSet对象publicvoidMerge(DataSetdatabase,boolpreserveChanges,MissingSchemaActionmissingSchemaAction)DataSet对象叫做数据集对象,是ADO.NET的核心成员。DataSet对象相当于内存中的一个数据库,包含数据表、数据列、数据行、视图、约束和关系。使用DataSet的Merge方法,可以进行数据的合并。语法如下:二、任务准备:3、DataGridView控件DataGridView控件叫做数据浏览器,在开发数据库应用程序时,通常用来显示数据的视图。如果需要在Windows窗体应用程序中显示表格数据,应该首要考虑使用DataGridView控件。目前通用的方法中,也可以采取使用ListView控件。二、任务准备:(1)设置DataGridView控件显示数据DataGridView控件的DataSource属性用于获取或设置所显示数据的数据源,语法如下:publicObjectDataSources{get;set};3、DataGridView控件例如:dgV_UserMsg.DataSource=ds.Tables["um"];表示名为dgV_UserMsg的DataGridView控件的数据源为DataSet数据集对象中名为“um”的表。二、任务准备:(2)常用属性和方法DataGridView数据视图常用的属性如表所示:3、DataGridView控件DataGridView控件常用属性属性说明SelectionModeDataGridView控件被选则模式,有5种不同值:CellSelect:选中单元格。FullColumnSelect:选中整行。FullRowSelect:选中整列。RowHeaderSelect:选中首行。ColumnHeaderSelect:选中首列。二、任务准备:(2)常用属性和方法DataGridView数据视图常用的方法如表所示:3、DataGridView控件DataGridView数据视图常用方法方法说明Add向DataGridView添加新行。Delete用于删除指定索引处的行。二、任务准备:4、SqlCommandBuilder对象SqlCommandBuilder对象的主要作用是用来批量更新数据库,一般和adapter结合使用。利用该对象能够自动生成对数据库的反向Sql命令,如:INSERT、UPDATE和DELETE命令。具体使用方法见【任务实施】步骤(5)。三、任务分析:1、制作如图所示的窗体应用界面,窗体上各控件的属性及功能如表所示:对象属性设置功能Form1Text:用户信息后台管理
DataGridView1Name:dgV_UserMsgSelectionMode:FullRowSelect显示用户注册信息,设置为整行选中。Button1Name:btn_delText:删除删除DataGridView控件中选中行Button2Name:btn_saveText:提交更改将DataGridView更新后的数据存入数据表中控件属性功能说明表三、任务分析:2、获得DataGridView控件中的选中行使用dgV_UserMsg.CurrentRow.Index。四、任务实施:1、新建一个窗体应用程序,或者直接在任务9.2基础上新增一个窗体),绘制如图所示界面。按照表设置控件属性。对象属性设置功能Form1Text:用户信息后台管理
DataGridView1Name:dgV_UserMsgSelectionMode:FullRowSelect显示用户注册信息,设置为整行选中。Button1Name:btn_delText:删除删除DataGridView控件中选中行Button2Name:btn_saveText:提交更改将DataGridView更新后的数据存入数据表中控件属性功能说明表四、任务实施:
DataSetds;//数据集SqlConnectionsqlconn;2、在窗体内定义如下对象,因为数据集对象和SQL数据库连接对象在按钮的Click事件中要使用,所有需要定义在Load事件外。四、任务实施:
privatevoidForm1_Load(objectsender,EventArgse){sqlconn=newSqlConnection("DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456");//创建连接sqlconn.Open();
stringsql="select*fromtb_UserMsg";//要执行的SQL语句
SqlDataAdaptersda=newSqlDataAdapter(sql,sqlconn);//数据适配器
ds=newDataSet();//创建DataSet对象
sda.Fill(ds,"um
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 41079.3-2024液态金属物理性能测定方法第3部分:黏度的测定
- 简单版工厂转让合同协议2篇
- 2024年度建筑施工沟通协调合同3篇
- 某城市地理环境课件
- 2024年度二手电动车广告投放合同2篇
- 零售店劳动合同范本
- 工程伦理课件下载
- 运维技术服务合同
- 2024年度二七区郭家咀铁三官庙N06地块安置区供排水工程合同2篇
- 公司股东入股合作协议书
- 合同到期欠款补充协议
- 本科层次职业教育装备制造类专业新形态教材建设研究
- 冬季出行安全主题班会
- 2024年学生公寓住宿协议
- 幼儿园安全守护制度
- 语文-湖南(河南)省湘豫名校联考2024年11月2025届高三上学期一轮复习诊断考试暨期中考试试题和答案
- 大学生劳动教育(2023级)学习通超星期末考试答案章节答案2024年
- 2024年中国心力衰竭诊断和治疗指南2024版
- 期中测试卷(试题)-2024-2025学年一年级上册语文统编版
- 外科手术基本操作考核评分表(切开、止血、缝合、打结与拆线)
- 国开(内蒙古)2024年《创新创业教育基础》形考任务1-3终考任务答案
评论
0/150
提交评论