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

填充 DataSet

System.Data 名称空间使用多种对象,您可以连接到一个数据库服务器,运行查询,然后把结果放到DataSet 对象中。DataSet 是断开连接的对象。因此,加载数据后,在您想加载更多数据或想使用您对这些信息的内存中副本所作的更改更新服务器之前,不会再使用与数据库的连接。

若要将数据从数据库加载到 DataSet 中,请按照下列步骤操作:

  1. 启动 Visual Studio .NET。
  2. 在 Visual C# .NET 中新建一个"控制台应用程序"项目。Visual Studio .NET 为您创建一个静态类和一个空的 Main 过程。
  3. 确保项目引用 System 和 System.Data 这两个名称空间。
  4. 对 SystemSystem.Data 和 System.Data.SqlClient 名称空间使用 using 语句,这样,在后面的代码中就不需要在这些名称空间中限定声明了。必须在任何其他声明之前使用这些语句。
    using System; using System.Data; using System.Data.SqlClient;
  5. 从数据库向 DataSet 获取数据的第一步是建立数据库连接,这需要一个System.Data.SqlClient.SqlCommand 对象和一个连接字符串。下面代码中的连接字符串连接着位于本地计算机(运行这些代码的计算机)上的 SQL Server 服务器。您必须根据环境相应地修改该连接字符串。创建SqlConnection 对象后,请调用该对象的 Open 方法以建立实际的数据库链接。
    string sConnectionString; sConnectionString = "Password=myPassword;User ID=myUserID;" + "Initial Catalog=pubs;" + "Data Source=(local)"; SqlConnection objConn = new SqlConnection(sConnectionString); objConn.Open();
  6. 创建一个 DataAdapter 对象,它表示数据库和 DataSet 对象之间的链接。您可以将 SQL 或另一类型的用于检索数据的命令指定为 DataAdapter 的构造函数对象的一部分。下面的示例使用了一个 SQL 语句从 Pubs 数据库的 Authors 表检索记录。
    SqlDataAdapter daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
  7. 必须声明并创建 DataSet 对象的一个实例,此时您应为整个 DataSet 提供一个名称,然后才能开始加载任何数据。该名称可包含若干独立的表。
    DataSet dsPubs = new DataSet("Pubs");
  8. SqlDataAdapter 类提供 Fill 和 FillSchema 两种方法,这对于加载这些数据很关键。这两种方法均可将信息加载到 DataSet 中。Fill 加载数据本身,而 FillSchema 加载有关特定表的所有可用的元数据(如列名、主键和约束)。处理数据加载的正确方式是先运行 FillSchema,后运行 Fill。例如:
    daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors"); daAuthors.Fill(dsPubs,"Authors");

    如果您只使用 Fill,则只能加载描述列名和数据类型所需要的基本元数据。Fill 方法不加载主键信息。若要更改此默认行为,可以将 DataAdapter 对象的 MissingSchemaAction 属性设置为MissingSchemaAction.AddWithKey,该属性会将主键元数据与默认信息一起加载。例如:

    daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey; daAuthors.Fill(dsPubs,"Authors");
  9. 这些数据此时作为 DataSet 的 Tables 集合内独立的 DataTable 对象来提供。如果您在对FillSchema 和 Fill 的调用中指定了一个表名,则可以使用该名称访问您需要的特定表。
    DataTable tblAuthors; tblAuthors = dsPubs.Tables["Authors"];
  10. 可以使用 For Each 循环依次通过一个 DataTable 的 Rows 集合内所有 DataRow 对象。这将使您能够访问表的每一行。可以按名称或按位置索引("0"是第一个列位置)访问列。例如:
    foreach (DataRow drCurrent in tblAuthors.Rows) { Console.WriteLine("{0} {1}", drCurrent["au_fname"].ToString(), drCurrent["au_lname"].ToString()); } Console.ReadLine();
    
    查询数据用 select * from 表名 where name=‘“+ 变量+”’”,
    数据取出来一般封装在dataset的一个实例对象中,比如ds。
    用 string value=ds.Tables[0].Row[0]["value"].ToString();
    就可以了

数据库填充DataSet,逐行访问的更多相关文章

  1. ADO.NET 快速入门(四):从数据库填充 DataSet

    从数据库获取数据很容易,处理数据更容易.如果想要从数据库获取只进.只读的数据流结果集,你可以使用 DataReader 执行命令并且检索它.关于如何使用 DataReader,请参考:使用 OLE D ...

  2. C# 一次查询多表,填充DataSet并指定表名

    lhrhi 原文 NET 一次查询多表,填充DataSet并指定表名(DataSet指定DataTable名称的技巧) 现实中的场景,有时可能需要一次查询数据库中表张.在使用SqlDataAdapte ...

  3. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

  4. Laravel学习笔记(六)数据库 数据库填充

    数据库驱动的应用程序往往需要预先填充数据到数据库,以便进行测试和演示. 什么是种子数据 种子数据就是必须要加载了应用程序才能正常运行的数据.大多数应用程序需要在开发.测试和生产中加载一些参考数据. 一 ...

  5. SQL Server 2008备份数据库失败,拒绝访问的原因

    原文:SQL Server 2008备份数据库失败,拒绝访问的原因 备份数据到特定目录是出现拒绝访问,然后测试备份到C盘根目录正常. 查了下原因: 是因为那个目录没有Authenticated Use ...

  6. Laravel 5.2数据库--填充数据

    1.简介 Laravel 包含了一个简单方法来填充数据库——使用填充类和测试数据.所有的填充类都位于database/seeds目录.填充类的类名完全由你自定义,但最好还是遵循一定的规则,比如可读性, ...

  7. 数据库安装后无法访问且mysql重启报错的解决方法

    数据库安装后无法访问,mysql重启报错: 或报错:MySQL is running but PID file could not be found 解决方法: 第一种方法:看磁盘是否已满:df –h ...

  8. net core天马行空系列:降低net core门槛,数据库操作和http访问仅需写接口,实现类由框架动态生成

    引文   hi,大家好,我是三合.不知各位有没有想过,如果能把数据库操作和http访问都统一封装成接口(interface)的形式, 然后接口对应的实现类由框架去自动生成,那么必然能大大降低工作量,因 ...

  9. MYSQL数据库无法使用IP地址访问的解决办法

    1.在运行中输入CMD,确定,进入文本方式. 2.输入mysql -h localhost -u root -p 回车,使用ROOT用户登录. 3.输入use mysql; 显示Database ch ...

随机推荐

  1. 如何获取Android唯一标识(唯一序列号)

    有很多场景和需求你需要用到手机设备的唯一标识符. 在Android中,有以下几种方法获取这样的ID. 1. The IMEI: 仅仅只对Android手机有效: 1 2 TelephonyManage ...

  2. Hadoo生态中pHive HBase 项目的区别

    http://jenmhdn.iteye.com/blog/1678789 导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于H ...

  3. .net平台借助第三方推送服务在推送Android消息(极光推送)

    最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS ...

  4. WebUploader文件图片上传插件的使用

    最近在项目中用到了百度的文件图片上传插件WebUploader.分享给大家 需要在http://fex.baidu.com/webuploader/download.html点击打开链接下载WebUp ...

  5. Python基础(12)--模块

    本文地址:http://www.cnblogs.com/archimedes/p/python-modules.html,转载请注明源地址. 模块简介 如果你退出 Python 解释器重新进入,以前创 ...

  6. JavaScript计算两个日期的时间差

    /** * * @param startTime * @param endTime * @param diffType * @returns {Number|number} * @constructo ...

  7. Linux Samba安装与使用

    一 安装环境: 虚拟机:RedHat  5.4  192.168.75.128 主机环境:WIN7 32bit  192.168.75.1 网络连接方式:NAT 二 安装步骤: 说明: Ø  samb ...

  8. proxy [ˈprɒksi] 代理

    谷歌.QQ支持,360.搜狗不支持 使用proxy代理可以实现,对原先的类不进行处理,新建一个类,对此进行拦截处理,以实现低耦合 可以通过代理拦截的方法,将方法进行重写. //------------ ...

  9. Generator [ˈdʒenəreɪtə(r)] 函数结构

    Generator函数是ES6新增的一种异步编程方案. 说明:Generator函数指的是一种新的语法结构,是一个遍历器对象生成器,它内部可以封装多个状态,非常适合用于异步操作. Generator函 ...

  10. SQLSERVER中的 CEILING函数和 FLOOR函数

    SQLSERVER中的 CEILING函数和 FLOOR函数 --SQLSERVER中的 CEILING函数和 FLOOR函数 --ceiling函数返回大于或等于所给数字表达式的最小整数. --fl ...