




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#C#程序设计第程序设计第6 6章使用章使用ADO.NETADO.NET管理管理数据数据目目 录录6.1 案例引入案例引入6.2 ADO.NET概述概述6.3 数据库连接数据库连接6.4 命令对象命令对象6.5 数据读取器数据读取器6.6 数据集数据集6.7 回到案例回到案例6.1 案例引入案例引入 某软件公司要设计一个窗体程序来保存员工的相关信息。下面是公司在数据库中已经建立好了的两张表,部门表和员工表:v 【实作任务】 员工信息保存功能的实现v 要求:根据数据库中的这两张表,设计相应的窗体程序,当管理员填写好员工信息点击提交按钮后,填写的信息能保存到数据库员工表中 。6.1 案例引入案例
2、引入6.2 ADO.NET概述概述 v ADO.NET中定义了一组访问和操作数据源的类,这些数据源除了常用的关系数据库,也可以是普通的文本文件、Excel表格或者XML文件。v ADO.NET为连接访问不同类型的数据库,提供了4种数据库客户端命名空间,可以在.NET编程环境中访问SQL Server数据库、Oracle数据库、ODBC数据源以及通过OLE DB技术实现的数据库。 6.3 数据库连接数据库连接 在C#程序中要访问SQL Server数据库,我们需要一个连接对象来和SQL Server数据库进行连接,ADO.NET中提供了SqlConnection类来完成连接的工作。 6.3 数据
3、库连接数据库连接1. 引入命名空间System.Data.SqlClient using System.Data.SqlClient;2. 根据连接字符串创建一个Sql Server连接对象 SqlConnection conn = new SqlConnection( Data Source=.SQLEXPRESS;Initial Catalog=companydb; User ID=sa;Password=123456);3. 建立Sql Server连接 conn.Open();4. 进行数据库访问操作5. 关闭Sql Server连接 conn.Close();6.4 命令对象命令对象
4、 v和数据库建立连接后,就需要对数据库进行操作,ADO.NET中提供了多种数据库的操作方式,本节介绍使用命令对象进行数据库操作的方式。 6.4 命令对象命令对象6.4.1 创建命令对象 v使用连接对象SqlConnection的CreateCommand方法来创建命令对象SqlCommand。 SqlCommand cmd = conn.CreateCommand();v使用SQL命令字符串和连接对象为参数实例化获得Sql Server命令对象。如下面的代码片段: String sql = SELECT * FROM tb_employee; SqlCommand cmd = new SqlC
5、ommand(sql,conn);6.4 命令对象命令对象6.4.2 执行SQL文本命令 vExecuteNonQuery():执行非查询命令,返回受影响的记录个数。vExecuteReader():执行查询命令,返回数据读取器对象。vExecuteScalar():执行查询命令,返回结果集中第一行的第一列数据。 6.4 命令对象命令对象v6.4.3 执行存储过程 使用SqlCommand对象还可以执行数据库中的存储过程,存储过程(Stored Procedure)是在数据库系统中一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带
6、有参数)来执行它。 6.5 数据读取器数据读取器 v6.5.1 数据读取器概述v上节中介绍的SqlCommand对象的ExecuteReader()方法会返回一个数据读取器SqlDataReader对象,通过这个对象能很方便的读取出查询结果。使用数据读取器对象只能以往前和只读的方式获取查询数据,每次从数据库服务器端检索一条记录,放入客户端的缓冲区,因此速度快。 6.5 数据读取器数据读取器6.5.2 查询数据 v /通过Sql Server连接对象获得Sql Server命令对象v SqlCommand cmd = conn.CreateCommand();v /设置SQL命令字符串v cmd
7、.CommandText = select name,age from tb_employee;v /执行非查询类型的SQL语句v SqlDataReader reader = cmd.ExecuteReader();v /在访问数据之前先调用DataReader对象的Read方法。v while (reader.Read()v v Console.WriteLine(String.Format(0, 1,v reader0, reader1);v v /关闭DataReader对象v reader.Close(); 6.5 数据读取器数据读取器6.5.3 获取表的信息 v SqlComman
8、d cmd = conn.CreateCommand(); v cmd.CommandText = select * from tb_employee; v SqlDataReader reader = cmd.ExecuteReader();v /通过DataReader对象获取DataTabel对象v DataTable dataTable = reader.GetSchemaTable();v /遍历DataTabel对象中的行对象,获取表的列名和数据类型v foreach (DataRow row in dataTable.Rows) v Console.WriteLine(Strin
9、g.Format(0,1,v rowcolumnname,rowdatatype);v v reader.Close(); 6.6 数据集数据集 6.6.1 数据集与数据适配器 除了使用前面介绍的SqlCommand和SqlDataReader来访问数据库,在ADO.NET中还提供了一个数据集DataSet类,这个类具有很强大的数据处理功能,所有复杂的数据操作都需要使用它, DataSet是ADO.NET的核心类。DataSet需要结合数据适配器DataAdapter一起使用,SqlDataAdapter表示一组 SQL 命令和一个数据库连接,用于填充 DataSet和更新数据源。 6.6 数
10、据集数据集v /通过连接对象创建一个SqlDataAdapter对象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee, conn); v /创建一个DataSet对象v DataSet ds = new DataSet();v /将SqlDataAdapter对象的查询结果填充到DataSet对象中v da.Fill(ds, employee);v /获取DataSet对象中students表第一行name列的数据v foreach (DataRow row in ds.Tablesemployee.Rows)
11、v v /在控制台中输出当前行name列的数据v Console.Write(rowname+ );v /在控制台中输出当前行age列的数据v Console.Write(rowage + );v /在控制台中输出当前行gender列的数据v Console.WriteLine(rowgender);v 6.6 数据集数据集 6.6.2 数据集中的数据修改 v / 通过连接对象创建一个SqlDataAdapter对象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee where name=李文, conn); v
12、 /为SqlDataAdapter创建一个SqlCommandBuilder对象v SqlCommandBuilder cb = new SqlCommandBuilder(da);v /创建一个DataSet对象v DataSet ds = new DataSet();v /将SqlDataAdapter对象的查询结果填充到DataSet对象中v da.Fill(ds, employee);v /判断是否有记录查询出来v if (ds.Tablesemployee.Rows.Count = 0)v v Console.Write(员工表中没有名为李文的记录);v Console.Read()
13、;v return;v 6.6 数据集数据集v /获取DataSet对象中employee表第一行name列的数据v String namestr = (String)ds.Tablesemployee.Rows0name;v Console.Write(更新前name列为:);v Console.WriteLine(namestr + );v /给DataSet对象中employee表第一行name列的数据赋值v ds.Tablesemployee.Rows0name = 李雯;v /将所做修改更新到数据库中v da.Update(ds, employee);v Console.Write(
14、更新后name列为:);v Console.WriteLine(ds.Tablesemployee.Rows0name);6.6 数据集数据集6.6.3 添加记录行 v /通过连接对象创建一个SqlDataAdapter对象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee, conn);v /为SqlDataAdapter创建一个SqlCommandBuilder对象v SqlCommandBuilder cb = new SqlCommandBuilder(da);v /创建一个DataSet对象v Data
15、Set ds = new DataSet();v /将SqlDataAdapter对象的查询结果填充到DataSet对象中v da.Fill(ds, employee);v /新建一个数据行v DataRow newrow = ds.Tablesemployee.NewRow();v /为新数据行的各列赋值v newrowname = 张力;v newrowage = 26;v newrowgender = M;v /将已赋值的新数据行加到表中v ds.Tablesemployee.Rows.Add(newrow);v /将所做修改更新到数据库中v da.Update(ds, employee
16、); 6.6 数据集数据集6.6.4 在DataSet中访问多个表 v在在DataSet中除了对单个表进行访问外,还中除了对单个表进行访问外,还可以访问和维护多个表以及它们之间的关可以访问和维护多个表以及它们之间的关系。每个系。每个DataSet中都有一个中都有一个Relations属属性来表示其中多个表对象性来表示其中多个表对象DataTable之间的之间的关系,关系,Relations属性是包含属性是包含DataRelation对象的集合,对象的集合,DataRelation对象用于表示对象用于表示两个两个DataTable对象之间的关系。对象之间的关系。 6.6 数据集数据集v /通过连
17、接对象创建一个访问员工表的SqlDataAdapter对象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee, conn); v /创建一个DataSet对象v DataSet ds = new DataSet();v /将查询结果填充到DataSet对象的名为employee的表中v da.Fill(ds, employee);v /通过连接对象创建一个访问部门表的SqlDataAdapter对象v SqlDataAdapter depda = v new SqlDataAdapter(select * fro
18、m tb_department, conn);v /将查询结果填充到DataSet对象的名为department的表中v depda.Fill(ds, department); 6.6 数据集数据集v /在DataSet对象中创建表department和表employee一对多的关系v DataRelation dr = ds.Relations.Add(empdeprel,v ds.Tablesdepartment.Columnsid,v ds.Tablesemployee.Columnsdepid);v /遍历表department的所有行v foreach (DataRow deprow in ds.Tablesdepartment.Rows)v /输出当前行数据的部门名称 v Console.WriteLine(deprowname+ );v /遍历某一部门的所有员工v foreach (DataRow emprow in deprow.GetChildRows(dr)v /输出当前行数据的员工姓名 v Console.WriteLine(emprowname + ); v v 6.7 回到案例回到案例 解决本章案例的步骤为:1. 启动VS2010并新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社工服务项目合同
- 工程承包和项目咨询合同
- 工业厂房买卖合同协议书
- 民间借贷担保人合同
- 0 的认识与加减法(教学设计)2024-2025学年一年级上册数学人教版
- 《12 昼与夜》作业设计方案-2024-2025学年二年级上册科学教学设计 粤教粤科版
- 绥化学院《外科学总论》2023-2024学年第二学期期末试卷
- 大连海洋大学《工程力学及机械设计基础》2023-2024学年第二学期期末试卷
- 铜陵学院《国际贸易综合实训》2023-2024学年第二学期期末试卷
- 宁夏工业职业学院《计算机网络基础》2023-2024学年第二学期期末试卷
- 人教版四年级下册数学全册教案含反思
- 雾化吸入技术教学课件
- 上海市宝山区2024-2025学年高三一模英语试卷(含答案)
- 2023年会计基础各章节习题及答案
- 2024年神农架林区林投集团招聘工作人员6名管理单位遴选500模拟题附带答案详解
- 海洋生物的奥秘
- 舞台设计课件教学课件
- 新能源汽车驱动电机及控制系统检修课件 学习情境1:驱动电机的认知
- 2024年采购部年终总结
- 打深水井施工方案
- 企业名称预先核准通知书
评论
0/150
提交评论