从数据库获取数据很容易,处理数据更容易。如果想要从数据库获取只进、只读的数据流结果集,你可以使用 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. 【转】如何在IOS中使用3D UI - CALayer的透视投影

    原文网址:http://www.tairan.com/archives/2041/ 例子代码可以在 http://www.tairan.com/thread-3607-1-1.html 下载 iOS的 ...

  2. ios 照片编辑的view封装

    转:http://www.cnblogs.com/xiaobaizhu/archive/2013/07/03/3170101.html 该控件有旋转,缩放,拖动,剪裁的功能,封装成了一个ImageCr ...

  3. ViewPager 滑动页(三)

    需求:滑动展示页,能够使用本地数据,及获取服务器数据进行刷新操作,当滑动到最后一页时,结束当前activity,进入下一个activity: 效果图: 实现分析: 1.目录结构: 代码实现: 1.Po ...

  4. JS 代码编一个倒时器

    有时候在生活中,你需要一个JavaScript倒计时时钟,而不是一个末日装置设备.不管你是否有一次约会,销售.促销.或者游戏,你可以受益于使用原生JavaScript构建一个时钟,而不是拿到一个现成的 ...

  5. POJ 1173 Find them, Catch them

    题意:有两个帮派,每个人只属于一个帮派,m次操作,一种操作告诉你两个人不是一个帮派的,另一种操作问两个人是不是在一个帮派. 解法:并查集+向量偏移.偏移量表示和根节点是不是同一帮派,是为0,不是为1. ...

  6. java jvm学习笔记十三(jvm基本结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完 ...

  7. Tableau学习笔记之五

    计算用户自定义字段,虽然在Tableau软件中已经加入了很多的数值操作运算,比如平均值,最大值等,但是可以自定义自己需要的数值操作运算. 数值操作可以有以下:预定义函数,百分比,总计,分级等等 1.直 ...

  8. DX11&C++

  9. select的option异常的总结

    来源:http://www.ido321.com/1189.html 昨天,在项目中碰到了option显示异常的原因,截图如下: Firefox中用css控制之后效果 chrome和IE中css不奏效 ...

  10. Tkinter教程之Button篇(1)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811298 #Tkinter教程之Button篇(1)#Button功能触发事件'''1.一个 ...