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相关推荐

  1. datatable更新到mysql_SQL通过Datatable更新数据库表内容

    //要注意的一点是在Select语句中要选择的列中必须包含主键的列,此外不支持多表连接查询 DataTable dt = new DataTable(); using (SqlConnection s ...

  2. DataGridView显示数据库数据(一)

    //创建数据库连接 SqlConnection con = new SqlConnection("server=.;database = test; uid = sa; pwd = 1234 ...

  3. c#水晶报表连接mysql_C# 用vs2008连接SQL数据库做动态水晶报表

    博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过 ...

  4. c#获取DataTable某一列不重复的值,或者获取某一列的所有值

    实现该功能是用了DataView的筛选功能,DataView表示用于排序.筛选.搜索.编辑和导航的 DataTable 的可绑定数据的自定义视图. 这里做了一个简单易懂的Demo来讲述该方法. 1.建 ...

  5. 在.NET中调用存储过程

    因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术.下面是它的定义: 存储过程(Stored ...

  6. ASP.Net绑定Sql数据源用echarts图表来展示数据

    ASP.Net绑定Sql数据源用echarts图表来展示数据 这里我们需要先学会ajax请求和网页的echarts图的使用 不会的同学也没关系可以看我接下来的内容我会一步步的来讲解的 首先大家可以先从 ...

  7. Spring Boot参考指南

    Spring Boot参考指南 作者 菲利普·韦伯,戴夫 Syer,约什 长,斯特凡 尼科尔,罗布 绞车,安迪·威尔金森,马塞尔 Overdijk,基督教 杜普伊斯,塞巴斯蒂安·德勒兹,迈克尔·西蒙斯 ...

  8. 用SqlDataAdapter.Update(DataSet Ds)更新数据库

    一. 用SqlDataAdapter.Update(DataSet Ds)更新数据库. 1. DbDataAdapter调用 Update 方法时,DataAdapter 将分析已作出的更改并执行相应 ...

  9. ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁:

    ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁: void UseDataAdapter() { //1 连接数据库 //2 创建 ...

最新文章

  1. html制作顶部选项卡,html: 原生javascript实现选项卡
  2. eclipse安装birt插件
  3. 【MySql】mysql-5.7.20-winx64安装配置
  4. 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯
  5. libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束
  6. vim如何自动补全,ycm配置
  7. elasticsearch,elasticsearch-service安装
  8. php htts cookies,Http和Https下的cookie的写入问题
  9. 一些最近发现的小问题
  10. Windows配置GitBook
  11. jQuery 学习-样式篇(二):jQuery 对象与原生 DOM 对象
  12. IDEA 导入 SSM项目
  13. 电气simulink常用模块_自动化设备电气图纸常用元件符号
  14. 《赖氏经典英语语法》第六集
  15. 悉尼大学高级计算机专业世界排名,悉尼大学专业排名一览及最强专业推荐(QS世界大学排名)...
  16. Android API19 设置Alarm闹钟
  17. dpdk大页内存原理
  18. (FortiGate)飞塔防火墙查看设备基本信息命令
  19. 跨职能流程图_领导跨职能团队的6个关键技巧
  20. 打包AS中的APK文件

热门文章

  1. Js获取字符串的显示宽度/高度
  2. Android逆向笔记-某水果大作战内购破解思路
  3. Redis工作笔记-持久化
  4. Java通过反射了解集合泛型的本质(Class反射都是在运行时执行的)
  5. PHP系统管理mongodb,MongoDB的日常维护管理
  6. mysql 安装1607_mysql服务启动报1607error
  7. asp网站短信api服务器,asp短信接口源码 比较简单但也挺实用用的(两个写法)...
  8. 一汽大众t一roc_15万元预算能买到的紧凑型SUV——一汽-大众T-ROC探歌
  9. mdb文件取消隐藏_webshellphp隐藏技巧
  10. ubuntu下NDK环境配置