你必须知道的ADO.NET(九) 深入理解DataAdapter(下)

摘要


由于各种原因,很久没有更新博客了!期间,几分迷茫,几分失落。令人欣慰的是,园子里还有很多热心的读者,都期待我更新博客。想到自己的文章,能对园友有所帮助,我又重拾久违的文笔,娓娓道来,朴实而不做作。在上一篇文章《你必须知道的ADO.NET(八)
深入理解DataAdapter(上)》
中,我主要介绍了DataAdapter的工作原理以及基本功能。在本文中,我将通过实例的方式讲解如何使用DataAdapter对象。


目录


  • 如何构造一个DataAdapter对象?

  • 填充数据到DataSet

  • 总结


1. 如何构造一个DataAdapter对象?


在讲如何用DataAdapter获取数据之前,先讨论一个问题:如何构造一个DataApdater对象?我们知道DataAdapter是一个类,那么如何创建一个类的对象呢(再次强调,本系列教程讲的比较基础,主要针对初学者)?呵呵,当然是用构造函数啦!因此,我们有必要了解一下DataAdapter的构造函数。通过前面的知识,我们已经很清晰的知道,对于不同的数据源,ADO.NET提供了不同的Data
Provider。以SQL Server数据库为例,它拥有的DataAdapter为SqlDataAdapter类,它包括以下构造函数:


        public SqlDataAdapter();
public SqlDataAdapter(SqlCommand selectCommand);
public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection);
public SqlDataAdapter(string selectCommandText, string selectConnectionString);

对于构造函数的理解,我们主要看他包含哪些参数。从上面我们可以知道,SqlDataAdapter类包含4个显式的构造函数。因此,我们必须用上述4个构造函数中的一种来实例化SqlDataAdapter类(创建SqlDataAdapter对象)。

提示:如果类中没有声明构造函数,创建对象时,将使用默认构造函数(无参数,无方法体)。如果类中显示声明了构造函数(一个或者多个),那么只能用声明的构造函数来实例化类(系统将不会创建默认构造函数)。

 1.1 SqlDataAdapter()

第一个构造函数相对来说比较简单,它不包含参数。我们可以轻松的得到一个SqlDataAdapter对象:


 SqlDataAdapter ada = new SqlDataAdapter();

OK,so easy!

 1.2 SqlDataAdapter(SqlCommand selectCommand)

第二个构造函数稍微复杂点,它包含了一个SqlCommand类型的参数。我们可以这样创建一个SqlDataAdatpter对象:


SqlCommand cmd = new SqlCommand();
SqlDataAdapter ada = new SqlDataAdapter(cmd);

 1.3 SqlDataAdapter(string selectCommandText, SqlConnection
selectConnection)

第三个构造函数,它包含了2个参数。第一个参数是字符串类型,它接受一个查询指令。第2个参数是SqlConnection类型,它表示一个连接对象。OK,我们还是写个例子吧!


string selCmdStr = "select * from tb_SelCustomer";
SqlConnection conn = new SqlConnection();
SqlDataAdapter ada = new SqlDataAdapter(selCmdStr, conn);

 1.4 SqlDataAdapter(string selectCommandText, string
selectConnectionString)

最后一个构造函数,它也包含了2个参数。2个参数均为字符串类型:第一个参数,它接受一个查询指令;第二个参数,它表示一个连接字符串。同样,我们也写个例子。


string selCmdStr = "select * from tb_SelCustomer";
string connStr = @"Data Source=.\SQLEXPRESS; Initial Catalog=db_MyDemo; Integrated Security=SSPI";//构造连接字符串
SqlDataAdapter ada = new SqlDataAdapter(selCmdStr, connStr);

2. 填充数据到DataSet


上面我详细了的介绍了如何构造一个DataAdapter对象。之所以很详细,因为只有构造好一个DataAdapter对象,我们才能发挥出它的功能。其中,它一个非常重要的功能就是填充数据到DataSet。SqlDataAdapter类除了有4个构造函数之外,还包含多个Fill()方法(方法重载)。一般来说,用的比较多的是int Fill(DataTable dt),  int
Fill(DataSet ds),
这2个方法分别接受 DataTable
参数和 DataSet
参数。拥有Fill()方法,我们可以轻松地将外部数据源中的数据填充到DataSet中。废话不多说,还是写个实例来加深理解。


 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 using System.Data.SqlClient;
7
8 namespace DataAdapter2
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 string connStr = @"Data Source=.\SQLEXPRESS; Initial Catalog=db_MyDemo; Integrated Security=SSPI";//连接字符串
15 string selCmdStr = "select * from tb_SelCustomer";//查询指令
16
17 using (SqlConnection conn = new SqlConnection(connStr))
18 {
19 SqlDataAdapter ada = new SqlDataAdapter(selCmdStr, conn);
20
21 DataSet ds = new DataSet();
22 ada.Fill(ds);
23
24 if (ds.Tables.Count > 0)
25 {
26 PrintDataTable(ds.Tables[0]);
27 }
28 }
29
30 Console.Read();
31 }
32
33 /// <summary>
34 /// 打印出DataTable中的内容
35 /// </summary>
36 static void PrintDataTable(DataTable dt)
37 {
38 int col = dt.Columns.Count;
39
40 foreach (DataRow row in dt.Rows)
41 {
42 for (int i = 0; i < col; ++i)
43 {
44 Console.Write("{0}\t", row[i]);
45 }
46 }
47 }
48 }
49
50 }

输出结果:

3. 总结


在本节中,我们主要学习了Adatapter对象的构造函数以及如何填充数据到DataSet。Adatapter构造函数比较多,特点鲜明。在实际开发中,你可以选择一种合适的构造函数来创建DataAdapter对象。就我个人经验来说,第2个和第3个构造函数用的比较多。如果查询指令不带参数,则使用第3个构造函数;如果查询指令带参数,则使用第2个构造函数。

你必须知道的ADO.NET(九) 深入理解DataAdapter(下),布布扣,bubuko.com

时间: 2024-08-02 06:58:53

你必须知道的ADO.NET(九) 深入理解DataAdapter(下)的相关文章

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大基础实用算法及其讲解 原文出处: cricode 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比 较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构 上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子

转15个必须知道的chrome开发者技巧GIF

在Web开发者中,Google Chrome是使用最广泛的浏览器.六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具.你可能已经熟悉了它的部分功能,如使用console和debugger在线编辑CSS.在这篇文章中,我们将分享15个有助于改进你的开发流程的技巧. 一.快速切换文件 如果你使用过sublime text,那么你可能不习惯没有Go to anything这个功能的覆盖.你会很高兴听到chrome开发者功能也有这个功能,当DevTools被打开的时候,按C

《jQuery风暴》第2章 必须知道的JavaScript知识

第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部, 而是讲解其精髓,这些知识可以提升大家的JavaScript内功.切忌,要修炼上乘的武功,必须要有深厚的内功基础,否则只可学到其招式而发挥不了功力.JavaScript实际上包括三部分: w   ECMAScript 描述了该语言的语法和基本对象. w   DOM 描述了处理网页内容的方法和接口.

《转》程序员必须知道的10大基础实用算法及其讲解

来源: Cricode  发布时间: 2014-06-19 08:27  阅读: 2018 次  推荐: 8   原文链接   [收藏] 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divideandconque

C#刨根究底:《你必须知道的.NET》读书笔记系列

一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP-王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心得和感悟,将技术问题以生动易懂的语言展开,层层深入,以例说理.全书主要,包括了.NET基础知识及其深度分析,以.NET Framework和CLR研究为核心展开.NET本质论述,涵盖了.NET基本知识几乎所有的重点内容.全书分为5个部分,第1部分讲述.NET与面向对象,从底层实现角度分析了.NET如何实现面向

《你必须知道的.NET》读书笔记一:小OO有大智慧

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象  (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初始化,这样一个对象实体就完成了出生过程. Person aPerson = new Person("小周" , 25); (2)旅程:在某种程度上就是外界通过方法与对象交互,从而达到改变对象状态信息的过程.这也和人的生存之道暗合. aPerson.ChangeName("Edis

《你必须知道的.NET》读书笔记二:小OO有大原则

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Facade模式.Proxy模式 (3)基本方法:Extract Interface 抽取接口.Extract Class 抽取类.Extract Method 抽取方法 (4)DEMO:数据库管理系统中根据不同权限进行CRUD操作(这里是使用Proxy模式重构后的代码)   (5)规则建议: ①一个类只有一个引

张维迎:你必须知道的10个经济学原理

张维迎:你必须知道的10个经济学原理 五道口金融沙龙2016-10-13 10:15:59阅读(0)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 加群请联系(微信号:wdkjrsl),由其审核通过后拉您进群 五道口金融沙龙是鸿儒金融教育基金会主办的公益性金融教育沙龙.沙龙已成功举办十三期,嘉宾分别是鸿儒金融教育基金会理事长许均华博士.德润租赁董事长王琨 先生.天图资本合伙人杨辉生先生.申万宏源集团首席经济学家房四海博士.前高盛首席

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①