使用DataAdapter填充DataSet(1)

在选择了DataAdapter的类型(SqlDataAdapter或OleDbDataAdapter)并配置了DataAdapter来执行所需的任务之后,可以用创建的DataAdapter来填充DataSet。

1.使用DataAdapter填充DataSet

可以使用DataAdapter来填充DataSet。调用DataAdapter的Fill方法,并指定要填充的DataSet表。Fill方法隐式执行DataAdapter的SelectCommand中的SQL查询,查询的结果用于定义DataSet表的结构,并用数据来填充表。此外,Fill方法是可重载的。例如:

rowsAffected = aDataAdapter.Fill(DataSet);  
rowsAffected = aDataAdapter.Fill(DataSet,strDataTableName);  
rowsAffected = aDataAdapter Fil](DataTable); 

当填充DataSet时,DataAdapter会强制一些约束,例如主键唯一性。为了提高性能,在填充DataSet前将EnforceConstraints属性设置为false,这将在数据加载过程中禁用约束检查。

aDataset.EnforceConstraints=false; 

【实例10-5】  使用Datadapter填充DataSet。

下面创建一个DataSet,它包含一个名为Department的表。使用名为daDepartment的DataAdapter来填充该表,并调用BeginLoadData方法来优化性能。

填充完该表之后,将一个DataGridView控件绑定到该表,该DataGridView将在屏幕上显示客户信息。

SqlDataAdapter daDept = new SqlDataAdapter(  
"select * from humanresources.department", cn);  
DataSet dsDept = new DataSet();  
dsDept.Tables.Add(new DataTable("Department"));  
dsDept.Tables[0].BeginLoadData();  
daDept.Fill(dsDept,"Department");  
dsDept.Tables[0].EndLoadData();  
dataGridView1.DataSource = dsDept.Tables["Department"]; 

DataAdapter和Command在如何处理Connection对象上有一个主要的区别:在调用一个Command对象的执行方法前,将打开与该Command相关联的Connection对象,否则Command会抛出一个异常;DataAdapter则没有这样的需求。

如果要调用DataAdapter对象的Fill方法,并且SelectCommand属性的Connection已经关闭,DataAdapter将自动打开连接、提交查询、提取结果,然后关闭Connection。读者也许会发现DataAdapter非常有条不紊,它总是将SelectCommand属性的Connection恢复到其初始状态。但是如果在调用Fill方法之前已经打开Connection,调用以后Connection仍然处于打开状态。因此使用DataAdapter的Fill方法时,不需要手工打开Connection。

但在一些特殊情况下,也需要在执行DataAdapter的Fill方法之前先打开Connection。例如,在应用程序启动时,用多个DataAdapter对象将多个查询的结果填充到DaraSet中。可以使用DataAdapter对象的构造函数强制每个DataAdapter都使用相同的Connection对象。代码如下:

string strConn = "Provider=SQLOLEDB;Data Souroe=(local)"+  
            "Initial catalog=Northwind;Trusted_connection=Yes;";  
OleDbConnection cn = new OleObconnection(strconn);  
OleDbOataAdapter daCustomers,daOrders;  
daCustomers = new OleDbDataAdapter("SELECT ... FROM Customers",cn);  
daOrders = new OleDbDataAdapter("SELECT ... FROM orders",cn);  
ds=new DataSet();  
daCustomers Fill(ds):  
daOrders.Fill(ds); 

实际上,当两次打开和关闭Connection时,每次都调用DataAdapter对象的Fill方法。为了避免重复地多次打开和关闭Connection对象,在对DataAdapter对象调用Fill方法之前,先调用Connection对象的Open方法。如果要在填充数据以后关闭Connection,则应该像下面例子中显示的那样调用Close方法。

cn.Open();  
daCusomers.Fill(ds);  
daOrders.Fill(ds);  
cn.Close(); 

2.高效地填充DataSet

填充DataSet最有效的方法是在填充DataSet前先定义显示架构,这意味着在填充DataSet前已经知道了DataTable、DataColumn和DataRelation。

断开式应用程序从数据库服务器中检索数据,由于事先知道数据的结构,因此可以创建类型化DataSet,其架构与所检索的数据结构相同,这使得数据在运行时可以被高效地加载。

在窗体设计器中创建类型化DataSet的步骤如下:

(1)将SqlDataAdapter控件或OleDbDataAdapter控件从工具箱拖放到窗体上。

(2)使用"数据适配器配置向导"按要求配置DataAdapter。

(3)右击新的DataAdapter对象,在弹出的快捷菜单中选择"生成数据集"命令。

(4)在弹出的"生成数据集"对话框中为新的DataSet类命名。

(5)选择要添加到DataSet中的表。

(6)选中"将此数据集添加到设计器"复选框。

(7)单击"确定"按钮,将创建一个从DataSet继承的类型化DataSet类,还将创建这个类的一个实例并将它添加到应用程序中。

(8)右击新的DataSet对象,在弹出的快捷菜单中选择"查看架构"命令。

(9)在XML设计器中检查DataSet的XSD架构。如果需要,可以通过将XSD架构元素从工具箱拖放到XML设计器上来修改和扩展XSD架构

DataAdapter的Fill方法(转)的更多相关文章

  1. javascript之fill()方法

    无意中看到fill这个方法,有些不解,起初以为是人家自定义的方法,后来才发觉原来不是,javascript里面是真的有这个方法,于是特地学习了下. fill()方法的作用是使用一个固定值来替换数组中的 ...

  2. ES6的Array.from()和Array.fill()方法

    今天处理数据时用到了Array.from()和Array.fill()方法,平时用的不多,这里记一下. 我的需求是要把字符串'abc',处理为[{exaple: 'abc_001.bcd'}, {ex ...

  3. Arrays.fill方法的陷阱

            昨晚调试程序时发现的,该方法不能初始化二维数组,不过当时没有报CE,提交的时候也是WA:今早上单独测试该方法,也没有CE,不过运行时异常.切记

  4. DataFrameNaFunctions无fill方法

    当我使用 spark2.1 ,为了填补 dataframe 里面的 null 值转换为 0 ,代码如下所示: dataframe.na.fill(0) 出现如下错误 Spark version 2.1 ...

  5. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  6. C#与数据库访问技术总结(十四)之DataAdapter对象

    DataAdapter对象 DataAdapter对象主要用来承接Connection和DataSet对象. DataSet对象只关心访问操作数据,而不关心自身包含的数据信息来自哪个Connectio ...

  7. DataSet与DataAdapter的关系

    DataSet 作用:DataSet,DataAdapter读取数据. 问:什么是DataAdapter?答:DataAdapter对象在DataSet与数据之间起桥梁作用 string strCon ...

  8. 用ASP.Net(C#)连接Oracle数据库的方法及实例

    今天看了一下asp.net连接oracle数据库的方法,得到了如下代码.这段代码打开了MyTable表,并把操作员的名字列出.字段类型是OracleString.读取的时候用的是字段编号,我不知道怎么 ...

  9. 数据适配 DataAdapter对象

    DataAdapter对象是DataSet和数据源之间的桥梁,可以建立并初始化数据表(即DataTable) 对数据源执行SQL指令,与DataSet对象结合,提供DataSet对象存取数据,可视为D ...

随机推荐

  1. spring AspectJ的Execution表达式(转载)

    原文:http://blog.csdn.net/peng658890/article/details/7223046 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需 ...

  2. 一个web应用的诞生(4)

    上一章实现了登录的部分功能,之所以说是部分功能,是因为用户名和密码写成固定值肯定是不可以的,一个整体的功能,至少需要注册,登录,密码修改等,这就需要提供一个把这些值存储到数据库的能力. 当前的主流数据 ...

  3. 从输入一个URL到页面渲染的流程简介

    首先说明以下是我参考网上答案和自己的思考,给出自己的想法,如果有问题,欢迎大家吐槽从用户在浏览器中输入一个URL,到整个页面渲染,这个过程中究竟发生了什么呢?今天先简单写下整个过程,后面再一点点完善. ...

  4. MYSQL<四>

    -- ########## 01.ER关系 ########## -- ER关系(逻辑描述) -- A:E---Entity简写,实体,具有相同属性(特征)的对象归为同一实体 -- Attribute ...

  5. linux 环境下安装MySQL5.7(yum)

    安装环境: CentOS7 64位,MySQL5.7 原文链接:https://blog.csdn.net/xyang81/article/details/51759200 1. 配置yum源 在My ...

  6. HDU-1083-Courses(最大匹配)

    链接: https://vjudge.net/problem/HDU-1083#author=HUCM201732 题意: 题目大意: 一共有N个学生跟P门课程,一个学生可以任意选一 门或多门课,问是 ...

  7. pyqt5-QTDesigner--控件操作

    Edit菜单       编辑小伙伴.用鼠标直接拖       编辑控件---样式等等. 点击需要编辑的控件--->   信号与槽 先用鼠标从控件往外拖---> --->选中相应的信 ...

  8. SQL Server 分割字符串和合并多条数据为一行

    分割字符串函数 create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20) ...

  9. CSS 阴影应用

    1.背景阴影的使用 box-shadow:1px 1px 1px 1px #ccccccc inset; 说明:第一个参数为水平阴影的大小.第二个为垂直阴影的大小(值可以为负数).第三个参数是阴影模糊 ...

  10. k8s中pod内dns无法解析的问题

    用k8s创建了pod,然后进入pod后,发现在pod中无法解析www.baidu.com,也就是出现了无法解析外面的域名的问题.经过高人指点,做个小总结.操作如下. 一,将CoreDNS 的Confi ...