DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。

在典型的多层实现中,用于创建和刷新 DataSet 并依次更新原始数据的步骤包括:
通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。
通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。
调用 GetChanges 方法以创建只反映对数据进行的更改的第二个 DataSet。
调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递
调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。
针对 DataSet 调用 AcceptChanges。或者,调用 RejectChanges 以取消更改。
需要注意的是:dataset所有数据都加载在内存上执行的,可以提高数据访问速度,提高硬盘数据的安全性。极大的改善了程序运行的速度和稳定性。
 

使用方法

1、创建DataSet对象

DataSet ds = new DataSet();

DataSet ds = new DataSet("DataSetName");

2、用数据集填充DataSet

最常用的是DataAdapter对象的Fill()方法给他填充数据

(1)

DataSet ds = new DataSet();

SqlDataAdapter adapt = new SqlDataAdapter(sqlcmd,con)

adapt.Fill(ds,"mytest");

(2)

DataSet ds=new DataSet();

DataTable dt=new DataTable("newTable");

ds.Tables.Add(dt);

(3)

DataSet ds=new DataSet();

DataTable dt=ds.Tables.Add("newTable");

3、访问DataSet中的表、行和列 值

(1): 访问每个 DataTable

按表名访问:ds.Tables["mytest"] //指定DataTable对象mytest(即访问DataSet中名为mytest的DataTable)

按索引(索引基于0的)访问:ds.Tables[0] //指定DataSet中的第一个DataTable

(2): 访问DataTable中的行

ds.Tables["mytest"].Rows[n] //访问mytest表 的第n+1行(行的索引是从0开始的)

ds.Tables[i].Rows[n] //访问DataSet中的第i+1个DataTable 的第n+1列(列的索引是从0开始的)

(3): 访问DataTable中的某个元素

ds.Tables["mytest"].Rows[n][m] //访问mytest表的第n+1行第m+1列的元素

ds.Tables[i].Rows[n][m] //访问DataSet中的第i+1个DataTable 表的第n+1行第m+1列的元素

ds.Tables["mytest"].Rows[n][name] //访问mytest表的第n+1行name列的元素

ds.Tables[i].Rows[n][name] //访问DataSet中的第i+1个DataTable 表的第n+1行name列的元素

(4): 取DataTable中的列名

ds.Tables["mytest"].Columns[n] //取出mytest表的n+1列列名

ds.Tables[i].Columns[n]

4、实例

using System;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient;

using System.Data;

namespace sqlconnection1

{

class Program

{

private void SQLConnectionF(string source, string select)

{

//创建连接

SqlConnection con = new SqlConnection(source);

SqlDataAdapter adapt = new SqlDataAdapter(select,con);

try

{

con.Open();

Console.WriteLine("connection is successful!");

}

catch (Exception e)

{

Console.WriteLine("connection error is :{0}", e.ToString());

}

//创建DataSet

DataSet ds = new DataSet();

//将数据添加到DataSet中

adapt.Fill(ds,"mytest");

//取出mytest表各列名

Console.WriteLine("{0,-15} {1,-10} {2,-10}",ds.Tables["mytest"].Columns[0],

ds.Tables["mytest"].Columns[1],ds.Tables["mytest"].Columns[2]);

//输出mytest表中第六行

DataRow row1 = ds.Tables["mytest"].Rows[5];

Console.WriteLine("{0,-15} {1,-10} {2,-10}",row1[0],row1[1],row1[2]);

//输出mytest表中第五行的第二列的值

DataRow row2 = ds.Tables["mytest"].Rows[4];

Console.WriteLine(" {0,-25} ", row2[1]);

//下列两种方法等效都等同于row2[1](即第五行的第二列的值)

Console.WriteLine(" {0,-25} ", ds.Tables["mytest"].Rows[4][1]);

Console.WriteLine(" {0,-25} ", ds.Tables["mytest"].Rows[4]["number"]);

//输出DataSet中的所有数据

foreach (DataRow row in ds.Tables["mytest"].Rows)

{

Console.WriteLine("{0,-15} {1,-10} {2,-10} {3}",row["name"] ,

row["number"] , row["low"] , row["high"]);

//取第三列的值

Console.WriteLine("{0,-15} ", row[3]);

}

Console.ReadLine();

con.Close();

}

static void Main(string[] args)

{

string sou = "server=duanyf\\SQLEXPRESS;" + "Initial Catalog=master;" + "UID = sa;" + "Password = dyf123";

string sel = "SELECT name,number,low,high From dbo.spt_values";

Program sqlcon = new Program();

sqlcon.SQLConnectionF(sou, sel);

}

}

}

--------------------- 本文来自 Andrewniu 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/andrewniu/article/details/53065522?utm_source=copy

DATASET()用法的更多相关文章

  1. DataSet用法详细 转

    DataSet用法详细 转 DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级 ...

  2. DataSet用法详细

    转自:http://www.cnblogs.com/zeroone/archive/2012/06/08/2541299.html DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程 ...

  3. dataset 用法(3)

    ReadXml 提供了只将数据或同时将数据和架构从 XML 文档读入 DataSet 的方式(若要同时读数据和架构,请使用包括 mode 参数的 ReadXML 重载之一,并将其值设置为 ReadSc ...

  4. dataset 用法(2)

    1.为DataTable添加列 (1)添加列 DataTable  tbl = ds.Tables.Add("User"); DataColumn col =tbl.Columns ...

  5. dataset 用法(1)

    DataSet是表和列结构在内存中的表示方式,DataSet支持多表.表间关系.数据约束等,和关系数据库的模型基本一致.(本质上是微型的数据库.包含一组DataTable对象和DataTable之间的 ...

  6. js 控制 class 类名(classList) 和 自定义属性(dataset)

    classList 用法: const div = document.querySelector('div') div.classList.add('myclass') // 添加类名 div.cla ...

  7. tensorflow学习笔记--dataset使用,创建自己的数据集

    数据读入需求 我们在训练模型参数时想要从训练数据集中一次取出一小批数据(比如50条.100条)做梯度下降,不断地分批取出数据直到损失函数基本不再减小并且在训练集上的正确率足够高,取出的n条数据还要是预 ...

  8. 【转】如何在TensorFlow中高效使用数据集

    本文主要记录tensorflow一个比较好用的API:Dataset,feed-dict 是向 TensorFlow 传递信息最慢的方式,应该尽量避免使用.向模型提供数据的正确方式是使用输入管道,这样 ...

  9. dataset 和DataTable的用法

    以下包含了这两种不同属性的用法: foreach (DataRow dr in dataset.Tables[0].Rows)            { if (i != 0 && l ...

随机推荐

  1. 使用MapReduce将mysql数据导入HDFS

    package com.zhen.mysqlToHDFS; import java.io.DataInput; import java.io.DataOutput; import java.io.IO ...

  2. android 真心话大冒险 摇色子

    android 真心话大冒险  摇色子 软件

  3. Oracle的PL_SQL的结构

    --PL/SQL的结构 declare --声明变量和常量关键字 v_name nvarchar2(); v_age integer;--常规变量声明 v_product table_name.col ...

  4. CSS重置 reset.css

    1. [文件] reset.css ~/*------------------------------------------* site:ifnoif.net* Style author:ifnoi ...

  5. MyEclipse消除frame引起的the file xxx cannot be found

    因为该页面所指向的页面路径不对,便进行手动修改,修改时却出现了很烦的问题,输入一个字就弹出一个提示框“the file XXX can not be found.Please check the lo ...

  6. 封装一个简单的Hibernate SessionFactory

    封装Hibernate框架中的session工厂   ,方便很多,免去了很多重复无用的代码 package com.maya.test; import org.hibernate.*; import ...

  7. JavaUtil_09_通用工具类-01_Hutool

    一.重要的官方资料 1. Hutool 官网 2. Hutool 参考文档 3. Hutool API文档

  8. lombok_学习_00_资源帖

    二.参考资料 Java界的神器-使用Lombok来消除你的冗余代码量 Lombok:让JAVA代码更优雅 Lombok开发指南

  9. 重写ScrollView实现两个ScrollView的同步滚动显示

    1.背景介绍 最近项目用到两个ScrollView的同步显示,即拖动左边的ScrollView滚动的同时,实现右边的ScrollView同步滚动.此种情形常用在复杂界面布局中,比如左边的ScrollV ...

  10. tensorflow中常量(constant)、变量(Variable)、占位符(placeholder)和张量类型转换reshape()

    常量 constant tf.constant()函数定义: def constant(value, dtype=None, shape=None, name="Const", v ...