数据集完全独立于数据源,可以与数据源链接或者完全断开,其基本作用是为存储在内存缓存中的的数据提供关系视图
如果只是想读取和显示数据,则值需要使用数据读取器,尤其是处理大量数据的时候
如果需要处理数据,然后更新数据库,就需要使用数据集
================================================
数据来自数据源,数据适配器就像水管,数据集就像水桶,
数据适配器将数据总数据源导入到数据集中
如果把DataSet比作数据库,那么DataTable就是数据表,DataColumn就是列,DataRow就是行
===========================================================================
一、利用 DataAdapter 填充数据到 DataSet
static void Main(string[] args)
{
string connstr = @"Data Source=WIN-VD88F15CMMD;Initial Catalog=Key;User ID=sa;pwd=130988825";
string sql = "select kXh,kXm from [Class]";
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
{
DataSet ds = new DataSet();
da.Fill(ds,"Class");
DataTable dt = ds.Tables["Class"];
foreach (DataRow row in dt.Rows) //遍历表
{
foreach (DataColumn col in dt.Columns)
Console.WriteLine(row[col]);
Console.WriteLine("".PadLeft(20,'='));
}
Console.ReadKey();
}
}
}
==============================================================
二、有两个 DataTable 的 DataSet
static void Main(string[] args)
{
string connstr = @"Data Source=WIN-VD88F15CMMD;Initial Catalog=Key;User ID=sa;pwd=130988825";
string sqla = "select * from [Class]";
string sqlb = "select * from [Student]";
string sql = sqla + sqlb; //注意查询出两个数据表的sql是如何写的
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = new SqlCommand(sql,conn);
DataSet ds = new DataSet();
da.Fill(ds,"Class"); // 当第一的表被命名为Table时,第二个表默认为Table1
DataTableCollection dtc = ds.Tables;
string f1 = "kGender='男'";
string srt = "kXm asc";
foreach (DataRow row in dtc["Class"].Select(f1, srt))
{
Console.WriteLine("{0}\t{1}",row["kXm"].ToString().PadRight(25),row["kXh"]);
}
Console.ReadKey();
foreach (DataRow row in dtc[1].Rows) // 虽然第二个表默认为Table1,但是我们一般用序号索引来引出第二个表
{
Console.WriteLine("{0}\t{1}",row[1].ToString().PadRight(25),row[2]);
}
}
Console.ReadKey();
}
}
========================================================================
三、利用 DataView 对 DataTable 中的数据进行 筛选排序
static void Main(string[] args)
{
string connstr = @"Data Source=WIN-VD88F15CMMD;Initial Catalog=Key;User ID=sa;pwd=130988825";
string sql = "select * from [Class]";
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = new SqlCommand(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Class");
DataTable dt=ds.Tables["Class"];
DataView dv = new DataView(
dt, //关联一个DataTable
"kGender='男'", //筛选器
"kXm", // 排序列
DataViewRowState.CurrentRows
);
foreach (DataRowView drv in dv)
{
for (int i = 0; i < dv.Table.Columns.Count; i++)
{
Console.WriteLine(drv[i]+"\t");
Console.WriteLine();
}
}
Console.ReadKey();
}
}
}
======================================================================
四、实现DataTable中数据的 增、删、改 并保存到数据源
1、数据集-数据的修改
static void Main(string[] args)
{
string connstr = @"Data Source=win-45022h0f9ns\mysqlserver;Initial Catalog=CallCenter;Persist Security Info=True;User ID=sa;pwd=130988825";
string qry = @"select * from Student where sId=22";
string upd = @"update Student set sName=@sName where sId=@sId";
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter sda = new SqlDataAdapter(qry, conn))
{
DataSet ds = new DataSet();
sda.Fill(ds,"Student");
DataTable dt =ds.Tables["Student"];
dt.Rows[0]["sName"] = "左杰"; //修改现有数据
SqlCommand cmd = new SqlCommand(upd,conn);
cmd.Parameters.Add("@sName",SqlDbType.NChar,10, "sName");
cmd.Parameters.Add("@sId", SqlDbType.Int,4,"sId");
sda.UpdateCommand = cmd;
sda.Update(ds,"Student");
}
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2、数据集-数据的增加
static void Main(string[] args)
{
string connstr = @"Data Source=win-45022h0f9ns\mysqlserver;Initial Catalog=CallCenter;Persist Security Info=True;User ID=sa;pwd=130988825";
string qry = @"select * from Student where sId=23"; //选出的数据为空
string ins = @"insert into Student(sName,sGender,sAge,sClass,sId) values(@sName,@sGender,@sAge,@sClass,@sId)";
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter sda = new SqlDataAdapter(qry, conn))
{
DataSet ds = new DataSet(); //选择出一个空的数据集
sda.Fill(ds,"Student");
DataTable dt=ds.Tables["Student"];
DataRow newrow = dt.NewRow();
newrow["sName"] = "胡章诚key";
newrow["sGender"]='男';
newrow["sAge"]=21;
newrow["sClass"] = 1;
newrow["sId"] = 23;
dt.Rows.Add(newrow);
SqlCommand cmd= new SqlCommand(ins,conn);
cmd.Parameters.Add("@sName", SqlDbType.NChar, 10, "sName");
cmd.Parameters.Add("@sGender", SqlDbType.Char, 2, "sGender");
cmd.Parameters.Add("@sAge", SqlDbType.Int, 4, "sAge");
cmd.Parameters.Add("@sClass", SqlDbType.Int, 4, "sClass");
cmd.Parameters.Add("@sId", SqlDbType.Int, 4, "sId");
sda.InsertCommand = cmd;
sda.Update(ds,"Student");
}
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
3、数据集-数据的删除
static void Main(string[] args)
{
string connstr = @"Data Source=win-45022h0f9ns\mysqlserver;Initial Catalog=CallCenter;Persist Security Info=True;User ID=sa;pwd=130988825";
string qry = @"select * from Student where sClass=2";
string del = @"delete from Student where sClass=@sClass";
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter sda = new SqlDataAdapter(qry, conn))
{
DataSet ds = new DataSet();
sda.Fill(ds,"Student");
DataTable dt=ds.Tables["Student"];
SqlCommand cmd = new SqlCommand(del,conn);
cmd.Parameters.Add("@sClass", SqlDbType.Int, 4, "sClass");
foreach (DataRow row in dt.Rows)
{
row.Delete();
}
sda.DeleteCommand = cmd;
sda.Update(ds,"Student");
}
}
}
- ADO.NET中DataSet、DataTable、DataRow的数据复制方法
DataSet 对象是支持 ADO.NET的断开式.分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据 ...
- 第九周学习笔记-ADO.Net中DataSet的应用
一.知识点描述 1.含义:DataSet是ADO.Net的断开式结构的核心组件,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据.DataSet包含一个或多个DataTable ...
- ADO.Net中DataSet的应用
一.知识点描述 1.DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.也就是说,即使断开数据链路,或者关闭数据库,Data ...
- ADO.NET获取数据(DataSet)同时获取表的架构
普通的ADO.NET获取DataSet的写法如下: using System.Configuration; using System.Data; using System.Data.SqlClient ...
- ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写Code Behind
[C#] ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写.后置程序代码 之前有分享过一个范例 [C#] ADO.NET #3 (GridVi ...
- 你必须知道的ADO.NET
原文:http://www.cnblogs.com/liuhaorain/archive/2012/02/06/2340409.html 1. 什么是ADO.NET? 简单的讲,ADO.NET是一组允 ...
- [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)
Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...
- ADO.NET 快速入门(六):读写 XML
ADO.NET 和 DataSet 可以读写 XML Schema 和 XML.获取更多信息,请参考 How do I...Use XML and the DataSet? DataSet 的 S ...
- 一个Entity Framework、ADO.NET查询性能测试
Entity Framework自然是会比ADO.NET性能慢点,这个不多说了.直接上结果. 本该用测试项目的,不过我建了个aspx.下面是随便测20遍得到的结果 补充!!把12行改成 list = ...
随机推荐
- JDK和JRE的差异和区别
来源:http://docs.oracle.com/javase/7/docs/
- Oracle语句优化规则(二)
21. 用EXISTS替换DISTINCT 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换 例如: ...
- jsp中forward和redirect的区别(转)
一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(reques ...
- Niagara技术文档汇总
Niagara技术文档汇总http://wenku.baidu.com/view/ccdd4e2c3169a4517723a38f.html Niagara讲解要点http://wenku.baidu ...
- Lync 2010升级到Lync 2013POC计划-过程!
最近在协助一家客户做升级项目调研,目前处在POC过程中,根据他们的需求我们将整个POC过程用Project 进行了下整理,了解整个项目中可能存在的风险和相应的计划过程,根据相应的计划我们能够将相应过程 ...
- Java面试题之三
十一.谈谈final,finally,finalize的区别? 1.final:是修饰符,是一个关键字.修饰变量,如果是基本类型表示该变量的值不能修改:如果是引用类型表示该变量不能指向别的对象:修饰类 ...
- Linq实现t-Sql的各种连接
在ORM框架大行其道的今天,对于.net行业的人,想要学好EF,那Linq的学习在势在必行啊.今天总结下平时比较常用的表连接的用法. Inner Join Linq: var list = (from ...
- 【集训笔记】动态规划【HDOJ1159【HDOJ1003
终于开始DP了] HDOJ_1159 Common Subsequence 题目链接 Sample Input abcfbc abfcab programming contest abcd mnp ...
- .Net Core 环境搭建
.Net Core 系列:1.环境搭建 前言: 2016年6月28日微软宣布发布 .NET Core 1.0.ASP.NET Core 1.0 和 Entity Framework Core 1.0. ...
- jquery.zclip—复制剪贴板(兼容各大浏览器)
开始前说两句 WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内 ...