数据库之SqlDataAdapter
SqlDataAdapter 类 表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。无法继承此类。 命名空间:System.Data.SqlClient 程序集:System.Data(在 system.data.dll 中) SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。 当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。有关更多信息,请参见 向 DataSet 添加现有约束。 SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能。 SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,以便于数据的加载和更新。 当创建 SqlDataAdapter 的实例时,读/写属性将被设置为初始值。
一.SqlDataAdapter对象
1. SqlDataAdapter特性
SqlDataAdapter类用作ADO.NET对象模型中和数据连接部分和未连接部分之间的桥梁。SqlDataAdapter从数据库中获取数据,并将其存储在DataSet中。SqlDataAdapter也可能取得DataSet中的更新,并将它们提交给数据库。
SqlDataAdapter是为处理脱机数据而设计的,调用其Fill方法填充DataSet时甚至不需要与数据库的活动连接。即如果调用Fill方法时,SqlDataAdapter与数据库的连接不是打开时,SqlDataAdapter将打开数据库连接,查询数据库,提取查询结果,将查询结果填入DataSet,然后关闭也数据库的连接。
2. SqlDataAdapter的设置
SqlCommand属性
SqlDataAdapter将查询结果存储到DataSet中时,SqlDataAdapter使用SqlCommand和SqlConnection与数据库进行通信。SqlDataAdapter在内部使用SqlDataReader获取结果,并将信息存储到DataSet的新行。SqlCommand类的属性包括SelectCommand、InsertCommand、UpdateCommand、DeleteCommand分别对应数据库的查询、插入、更新和删除操作。
TabbleMappings集合
默认情况下,SqlDataAdapter假定SqlDataReader中的列与DataSet中的列匹配,但实际情况中往往期望DataSet的架构不同于数据库的架构,因此SqlDataAdapter提供了一种将查询结果映射到DataSet结果的机制:TableMappings集合。
SqlDataAdapter的TableMappings属性返回一个DataTableMappingsConnention对象,它包含DataTableMapping对象的集合。每个对象允许在数据库中的一个表(或视图或存储过程)与DataSet中相对应的DataTable的名称之间建立一种映射;TableMappings对象具有ColumnMappings属性,它返回DataColumnMappings对象组成的集合,每个DataColumnMappings对象对应数据库查询结果中的一列映射到DataSet中DataTable中的一列。示例代码如下:
Using System.Data.Common;SqlDataAdapter da=new SqlDataAdapter();//初始化DataAdapter DataTableMapping tableMap;tableMap=da.TableMappings.Add(“Table”,”Employees”);tableMap.ColumnMappings.Add(“EmpID”,”EmployeeID”);tableMap.ColumnMappings.Add(“LName”,”LastName”);
二.SqlDataAdapter的创建与使用
1. 创建SqlDataAdapter
New 关键字
New 关键字建立新的SqlDataAdapter对象后,再设置其SqlCommand属性
SqlDataAdapter da=new SqlDataAdapter();da.SelectCommand=cmd;
SqlDataAdapter的构造函数
strSql是查询数符串;strConn是数据库连接字符串;cmd是SqlCommand对象;cn是SqlConnection对象。
SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);SqlDataAdapter da=new SqlDataAdapter(strSql,cn);SqlDataAdapter da=new SqlDataAdapter(cmd);
执行以上代码后,DataSet的实例对象ds中会创建一个新的DataTable,这个DataTable拥有strSql查询语句中所包括的字段,但DataTable对象的名称为默认的Table,而不是查询语句中所查询的表的名称。
使用重载的Fill方法
指定DataTable
da.Fill(DataSet,”MyTableName”)// SqlDataAdapter填充指定DataSet的特定表。
da.Fill(DataTable);// SqlDataAdapter填充已经创建的DataTable对象。
Fill方法分页显示
da.Fill(DataSet,intStartRecord,intNumRecord,”TableName”);//Fill方法可能很轻松的实现分页显示,但操作效率很低。
调用SqlDataAdapter对象Fill方法过程的数据库连接的打开与关闭
SqlDataAdapter的Fill方法调用前不需要有活动的SqlConnection对象,SqlDataAdapter会自己打开strConn语句中的数据库,获取查询结果后,关闭与数据库的连接。如果已经存在SqlConnection对象,无论是否已经打开,SqlDataAdapter执行完Fill方法后,均会将SqlConnection对象返回到原始状态。
当程序中的多个SqlDataAdapter对象使用都一个SqlConnection对象时,为避免多次打开与关闭SqlConnection对象,应该在调用SqlDataAdapter的Fill方法前调用SqlConnection的Open方法打开数据库的连接,待完成Fill调用后再调用SqlConnection的Close方法关闭数据库的连接。
DataSet中数据的更新
如果DataSet中的数据需要更新,在调用Fill方法之前应该先清除DataSet或DataTable中的数据,这样可以确保DataTable中不会出现重复的数据行,也不会出现数据库中已经不存在的数据行。
3. 将查询结果映射到DataSet
TableMappings映射
TabbleMappings集合控制SqlDataAdapter如何将DataSet映射到数据库。如果保持TabbleMappings集合为空,调用Fill方法,然后将DataSet作为参数,而不指定表名,SqlDataAdapter将假定您希望使用一个名为“Table”的DataTable来装载数据。
SqlDataAdapter.TableMappings.Add(“Table”,”Employees”)
此语句的作用是将DataSet中原来名字为“Table”的DataTable命名为“Employees”,DataSet填充数据时,按查询结果集的顺序依次填充DataSet中的Table、Table1、Table2……,所以给DataTable命名时需留意该DataTable是否为当前将要使用的对象。
TableMappings和ColumnMappings的AddRange方法
构造并赋值DataTableMapping、DataColumnMapping数组,再调用它们的AddRange方法将该集合整体添加到映射数组。
DataTableMapping tableMap;tableMap=da.TableMapping.Add(“Table”,”Employees”);DataColumnMapping[] columnMaps;columnMaps=new DataColumnMapping[];{new DataColumnMapping (“EmpID”,”EmployeeID”),new DataColumnMapping (“LName”,”LastName”)}tableMap.ColumnMapping.AddRange(columnMaps);
在TableMappings集合时,它将查看MissingMappingAction属性的值来决定如何操作。
Passthrough 映射中没有出现的列仍然填充到DataSet,采用原结果集的名称;
Ignore 忽略映射中没有出现的列;
Error 在出现不匹配的情况下引发异常;
转载于:https://www.cnblogs.com/jacksundatashare/p/5074107.html
数据库之SqlDataAdapter相关推荐
- datatable更新到mysql_SQL通过Datatable更新数据库表内容
//要注意的一点是在Select语句中要选择的列中必须包含主键的列,此外不支持多表连接查询 DataTable dt = new DataTable(); using (SqlConnection s ...
- DataGridView显示数据库数据(一)
//创建数据库连接 SqlConnection con = new SqlConnection("server=.;database = test; uid = sa; pwd = 1234 ...
- c#水晶报表连接mysql_C# 用vs2008连接SQL数据库做动态水晶报表
博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过 ...
- c#获取DataTable某一列不重复的值,或者获取某一列的所有值
实现该功能是用了DataView的筛选功能,DataView表示用于排序.筛选.搜索.编辑和导航的 DataTable 的可绑定数据的自定义视图. 这里做了一个简单易懂的Demo来讲述该方法. 1.建 ...
- 在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术.下面是它的定义: 存储过程(Stored ...
- ASP.Net绑定Sql数据源用echarts图表来展示数据
ASP.Net绑定Sql数据源用echarts图表来展示数据 这里我们需要先学会ajax请求和网页的echarts图的使用 不会的同学也没关系可以看我接下来的内容我会一步步的来讲解的 首先大家可以先从 ...
- Spring Boot参考指南
Spring Boot参考指南 作者 菲利普·韦伯,戴夫 Syer,约什 长,斯特凡 尼科尔,罗布 绞车,安迪·威尔金森,马塞尔 Overdijk,基督教 杜普伊斯,塞巴斯蒂安·德勒兹,迈克尔·西蒙斯 ...
- 用SqlDataAdapter.Update(DataSet Ds)更新数据库
一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库. 1. DbDataAdapter调用 Update 方法时,DataAdapter 将分析已作出的更改并执行相应 ...
- ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁:
ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁: void UseDataAdapter() { //1 连接数据库 //2 创建 ...
最新文章
- html制作顶部选项卡,html: 原生javascript实现选项卡
- eclipse安装birt插件
- 【MySql】mysql-5.7.20-winx64安装配置
- 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯
- libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束
- vim如何自动补全,ycm配置
- elasticsearch,elasticsearch-service安装
- php htts cookies,Http和Https下的cookie的写入问题
- 一些最近发现的小问题
- Windows配置GitBook
- jQuery 学习-样式篇(二):jQuery 对象与原生 DOM 对象
- IDEA 导入 SSM项目
- 电气simulink常用模块_自动化设备电气图纸常用元件符号
- 《赖氏经典英语语法》第六集
- 悉尼大学高级计算机专业世界排名,悉尼大学专业排名一览及最强专业推荐(QS世界大学排名)...
- Android API19 设置Alarm闹钟
- dpdk大页内存原理
- (FortiGate)飞塔防火墙查看设备基本信息命令
- 跨职能流程图_领导跨职能团队的6个关键技巧
- 打包AS中的APK文件
热门文章
- Js获取字符串的显示宽度/高度
- Android逆向笔记-某水果大作战内购破解思路
- Redis工作笔记-持久化
- Java通过反射了解集合泛型的本质(Class反射都是在运行时执行的)
- PHP系统管理mongodb,MongoDB的日常维护管理
- mysql 安装1607_mysql服务启动报1607error
- asp网站短信api服务器,asp短信接口源码 比较简单但也挺实用用的(两个写法)...
- 一汽大众t一roc_15万元预算能买到的紧凑型SUV——一汽-大众T-ROC探歌
- mdb文件取消隐藏_webshellphp隐藏技巧
- ubuntu下NDK环境配置