从数据库获取数据很容易,处理数据更容易。如果想要从数据库获取只进、只读的数据流结果集,你可以使用 DataReader 执行命令并且检索它。关于如何使用 DataReader,请参考:使用 OLE DB 检索数据使用 SQL Server 检索数据。更多关于绑定、浏览、或者远程处理数据查询结果集的操作,你可以如下例所示把结果集放到 DataSet 里。
 
请记住最重的是,DataSet 是一种独立的有别于数据存储的数据结构。尽管示例从数据库获取数据,但是数据来源是无所谓的;DataSet 总是呈现出一种统一的编程模型。这是一个简单的关于关系型数据库收集数据的示例。由于数据来源不可知,DataSet 上没有加载、打开、或者执行操作。本节描述了如何使用 SqlDataAdapter 从数据库获取数据填充到DataSet。
 
你可以使用 Add 方法添加数据到 DataSet(请参考:从 DataSet 更新数据库),或者直接使用原生的XML方法(请参考:读写 XML 数据)推送数据。SqlDataAdapter 除了可以用于从数据库检索数据,也可以反向推送数据回数据库。这里,重点关注的是获取输出数据。
 
第一步是构建 SqlDataAdapter。也可以使用 SqlCommand 来构建 SqlDataAdapter。
 
    String SelectCmdString = "select * from customers";
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(SelectCmdString, myConnection); SqlCommand mySelectCommand = New SqlCommand("select * from customers", myConnection);
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySelectCommand);
除了 Fill 和 Update 方法以外,SqlDataAdapter 对象和 SqlCommand 对象非常类似。Fill 方法填充 DataSet 对象。Update 方法获取DataSet 的改动,并且把改动反映回数据库。这是 DataAdapter 上指定的4个命令完成的。这些命令是:SelectCommand、UpdateCommand、InsertCommand,和 DeleteCommand。你可以显式的指定这些命令,在运行时控制语句执行变动,包括使用存储过程。对于特别的场景,CommandBuilder 对象可以基于 select 语句  (参考:从 DataSet 更新数据库). 在运行时创建他们。然而,运行时创建需要一次额外的服务器往返以便收集必要的元数据,因此在设计时显式提供 insert、update、和 delete 命令可以得到更好的运行时性能。
 
备注:Visual Studio 建立了类型化 SqlDataAdapters 和 DataSets,并且最终为你创建存储过程。通过使用 ComponentDesigner 和数据库对象探究这个特性。
 
一旦创建了 SqlDataAdapter 对象,你就可以通过它来填充 DataSet。
 
    myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet,"Customers");
当前的 DataSet 保存查询结果集。实际上,DataSet 可以从多个查询甚至关联他们的查询(请参考:使用关系型数据)保存结果集。因为保存了多个结果集,所以 DataSet 包含了一组表。请注意 Fill 方法允许“Customers”作为第二个参数。这是填充到 DataSet 中的表名。如果表不存在,就为你创建它。
 
因为数据是存储在表里一组行里面,所以你可以很容易使用 foreach 语句来迭代这些行:
 
    foreach (DataRow myDataRow in myDataSet.Tables["Customers"].Rows)
{
Console.WriteLine(myDataRow["CustomerId"].ToString());
}
实际上,在列上同样可以使用foreach语句。下面的例子演示了本节所有的代码。了解如何更新数据回数据库,请参考:从 DataSet 更新数据库
 
    public class GettingDataExample
{
public void Run()
{
SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind"); string selectCmdString = "SELECT * FROM Customers"; // 构建 SqlDataAdapter
SqlDataAdapter myDataAdapter1 = new SqlDataAdapter(selectCmdString, myConnection); // 使用 SqlCommand 构建 SqlDataAdapter
SqlCommand mySelectCommand = new SqlCommand(selectCmdString, myConnection);
SqlDataAdapter myDataAdapter2 = new SqlDataAdapter(mySelectCommand); DataSet myDataSet = new DataSet();
myDataAdapter1.Fill(myDataSet, "Customers"); // 迭代 DataSet
foreach (DataRow myDataRow in myDataSet.Tables["Customers"].Rows)
{
Console.WriteLine(myDataRow["CustomerId"].ToString());
}
}
}
 

ADO.NET 快速入门(四):从数据库填充 DataSet的更多相关文章

  1. ADO.NET 快速入门(五):从 DataSet 更新数据库

    该主题说明了如何使用 DataSet 在数据库中更新数据.你依然可以直接使用 SqlCommand 在数据库中插入.更新.和删除数据,记住这一点也很重要.理解“从数据库填充DataSet”涵盖的概念有 ...

  2. ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET

    这是一个已经移植到 .NET 的 ADO 应用的例子.也演示了单向.只读.快速 DataReader 的使用.它演示如何使用 DataView 类从 DataSet 获取一个 Table 和 操作一个 ...

  3. ADO.NET 快速入门(一):ADO.NET 概述

    ADO.NET 概述 ADO.NET是改进的ADO数据访问模型用于开发可扩展应用程序.他是专门为可伸缩性.无状态和XML核心的web而设计的.   ADO.NET使用一些ADO对象,如Connecti ...

  4. AndroidStudio快速入门四:打造你的开发工具,settings必备

    http://blog.csdn.net/jf_1994/article/details/50085825 前言:这里是使用AS的基本设置,适合新入手的朋友阅读,将这里介绍的设置完基本使用无忧啦. 1 ...

  5. ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据

    本文演示如何使用2种不同的方法从 SQL Server 生成 XML.   方法1:使用了 SqlCommand 的 ExecuteXmlReader 方法获取 XmlReader,然后使用 Data ...

  6. 数据库填充DataSet,逐行访问

    DataSet 对象是 Microsoft .NET 框架中数据访问的关键部分,是可保存表.视图和关系的内存中对象.本文介绍如何使用一个或多个数据库查询的结果填充 DataSet 对象,以及在将这些数 ...

  7. ADO.NET 快速入门(十四):使用 SQL Server 检索数据

    SqlDataReader 类提供了一种从数据源读取数据记录只进流的方法.如果想使用 OLE DB 接口的数据库或者 SQL Server7.0 之前的版本,请参考文章:使用 OLE DB 检索数据. ...

  8. ADO.NET 快速入门(七):使用数据库事务

    数据库事务用于控制数据提交到数据库.例如,在标准的账户程序,账户的借贷必须同时完成.由于电脑偶尔发生故障(电力中断.网络中断,等等),可能有些记录被更新或者添加,但是另外一些没有.为了避免这些情况,可 ...

  9. ADO.NET 快速入门(六):读写 XML

    ADO.NET 和 DataSet 可以读写 XML Schema 和 XML.获取更多信息,请参考 How do I...Use XML and the DataSet?   DataSet 的 S ...

随机推荐

  1. Android Broadcast Receiver

    说明 有时候我们在做android系统软件的时候,经常会需要做的事就是开机重新设置上次关机前的状态,当然,我们就会用到这个开机广播: <uses-permission android:name= ...

  2. linux - markdown编辑器

    1. linux可以用web-qq,http://web2.qq.com,[我们从未放弃成长,这句话挺感动我的.] (禽兽!你怎么在一开始就跑题!?) ————我只要“及时预览”———— 2. htt ...

  3. IOS的XML文件解析,利用了NSData和NSFileHandle

    如果需要了解关于文档对象模型和XML的介绍,参看 http://www.cnblogs.com/xinchrome/p/4890723.html 读取XML 上代码: NSFileHandle *fi ...

  4. 用ioctl获取无线网络信息 /usr//include/linux/wireless.h

    1.UNIX Network Programming环境搭建 Unix NetWork Programming――环境搭建(解决unp.h等源码编译问题) http://blog.csdn.net/a ...

  5. (原创)LAMP教程1-下载虚拟机软件

    (原创)LAMP教程1 从今天开始会在我的博客更新LAMP教程,第一章节就是安装虚拟机,因为不可能所有的人都有机会操作服务器,所以今天我打算教大家用虚拟机安装配置当下比较流行的框架,lamp. 好了费 ...

  6. 《Python核心编程》 第五章 数字 - 课后习题

    课后习题  5-1 整形. 讲讲 Python 普通整型和长整型的区别. 答:普通整型是绝大多数现代系统都能识别的. Python的长整型类型能表达的数值仅仅与你机器支持的(虚拟)内存大小有关. 5- ...

  7. Struts2动态调用DMI及错误解决方法

    在Strust2中action可以定义自己的方法,调用方法有两种方式,一种方式是struts.xml中指定method来表示需要用到的方法, 但是这种方法缺点在于如果你的Action中有很多方法则要多 ...

  8. POJ 2280&&hdu 1661

    题意:给定平面上的N个点,属性分别标记为0和1,然后找一条直线,直线上的点全部溶解,一侧的1溶解,另一侧的0溶解.求出最多能溶解的点的个数. 思路:暴力枚举每个点,扫描线旋转.先做优化,如果一侧溶解0 ...

  9. FS,FT,DFS,DTFT,DFT,FFT的联系和区别

    DCT变换的原理及算法 文库介绍 对于初学数字信号处理(DSP)的人来说,这几种变换是最为头疼的,它们是数字信号处理的理论基础,贯穿整个信号的处理. 学习过<高等数学>和<信号与系统 ...

  10. 简易版CSS3 Tab菜单 实用的Tab切换

    今天我们要来分享一款非常简易而又实用的CSS3 Tab菜单,Tab菜单没有非常华丽的动画,但是代码非常简洁易懂,也可以在大部分场合使用,因此也非常实用,如果你需要加入动画效果,也可以自己方便地修改这款 ...