DataAdapter的Fill方法(转)
使用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方法(转)的更多相关文章
- javascript之fill()方法
无意中看到fill这个方法,有些不解,起初以为是人家自定义的方法,后来才发觉原来不是,javascript里面是真的有这个方法,于是特地学习了下. fill()方法的作用是使用一个固定值来替换数组中的 ...
- ES6的Array.from()和Array.fill()方法
今天处理数据时用到了Array.from()和Array.fill()方法,平时用的不多,这里记一下. 我的需求是要把字符串'abc',处理为[{exaple: 'abc_001.bcd'}, {ex ...
- Arrays.fill方法的陷阱
昨晚调试程序时发现的,该方法不能初始化二维数组,不过当时没有报CE,提交的时候也是WA:今早上单独测试该方法,也没有CE,不过运行时异常.切记
- DataFrameNaFunctions无fill方法
当我使用 spark2.1 ,为了填补 dataframe 里面的 null 值转换为 0 ,代码如下所示: dataframe.na.fill(0) 出现如下错误 Spark version 2.1 ...
- C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例
DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...
- C#与数据库访问技术总结(十四)之DataAdapter对象
DataAdapter对象 DataAdapter对象主要用来承接Connection和DataSet对象. DataSet对象只关心访问操作数据,而不关心自身包含的数据信息来自哪个Connectio ...
- DataSet与DataAdapter的关系
DataSet 作用:DataSet,DataAdapter读取数据. 问:什么是DataAdapter?答:DataAdapter对象在DataSet与数据之间起桥梁作用 string strCon ...
- 用ASP.Net(C#)连接Oracle数据库的方法及实例
今天看了一下asp.net连接oracle数据库的方法,得到了如下代码.这段代码打开了MyTable表,并把操作员的名字列出.字段类型是OracleString.读取的时候用的是字段编号,我不知道怎么 ...
- 数据适配 DataAdapter对象
DataAdapter对象是DataSet和数据源之间的桥梁,可以建立并初始化数据表(即DataTable) 对数据源执行SQL指令,与DataSet对象结合,提供DataSet对象存取数据,可视为D ...
随机推荐
- 【洛谷P3338】力
题目大意:求 \[ E_{j}=\sum_{i<j} \frac{q_{i}}{(i-j)^{2}}-\sum_{i>j} \frac{q_{i}}{(i-j)^{2}} \] 题解:可以 ...
- stdarg的使用
// 可变参头文件 <stdarg.h> // 主要依赖五个宏: va_list,va_start, va_arg, va_end, va_copy // 其中 va_copy 是 c99 ...
- 在HTML页面加载完毕后运行某个js
js <script type="text/javascript"> window.onload=function(){ //执行} </script> j ...
- 2019强网杯web upload分析(pop链)
参考链接:https://blog.csdn.net/qq_41173457/article/details/90724943 注意 只要namespace相同那就可以直接实例化同一namespace ...
- Python 3标准库第一天讲解总结
一.很多知识自己没有理解透: 二.课件准备不足: 三.第一次讲解有点紧张: 四.口才也不是很好,很多有断片的情况: 五.SB式的坚持:
- Docker(四):Docker常用命令
除过以上我们使用的Docker命令外,Docker还有一些其它常用的命令 拉取docker镜像 docker pull image_name 查看宿主机上的镜像,Docker镜像保存在/var/lib ...
- Nginx之概念和简介
Nginx是什么? 代理服务器,处于客户端和服务器端之间的一台服务器,不负责处理请求. 主要作用是什么? 1.负载均衡: 高并发场景下,Nginx代理服务器按一定规则将请求分发,从而使服务器能有条不紊 ...
- Vue的watch和computed方法的使用
Vue的watch属性 Vue的watch属性可以用来监听data属性中数据的变化 <!DOCTYPE html> <html> <head> <meta c ...
- error C2280: 尝试引用已删除的函数
#include<unordered_map> struct SceneData { unordered_map<CString, CString> mConversation ...
- ef复杂模型添加
模型浏览器 函数导入-添加存储过程名称 添加复杂实体.复杂实体可以手动在xml里面创建.在complextype里面