数据集完全独立于数据源,可以与数据源链接或者完全断开,其基本作用是为存储在内存缓存中的的数据提供关系视图
如果只是想读取和显示数据,则值需要使用数据读取器,尤其是处理大量数据的时候
如果需要处理数据,然后更新数据库,就需要使用数据集
================================================
数据来自数据源,数据适配器就像水管,数据集就像水桶,
数据适配器将数据总数据源导入到数据集中
如果把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 2SqlDataAdapter、DataSet 的基本用法的更多相关文章

  1. ADO.NET中DataSet、DataTable、DataRow的数据复制方法

    DataSet 对象是支持 ADO.NET的断开式.分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据 ...

  2. 第九周学习笔记-ADO.Net中DataSet的应用

    一.知识点描述 1.含义:DataSet是ADO.Net的断开式结构的核心组件,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据.DataSet包含一个或多个DataTable ...

  3. ADO.Net中DataSet的应用

    一.知识点描述 1.DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.也就是说,即使断开数据链路,或者关闭数据库,Data ...

  4. ADO.NET获取数据(DataSet)同时获取表的架构

    普通的ADO.NET获取DataSet的写法如下: using System.Configuration; using System.Data; using System.Data.SqlClient ...

  5. ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写Code Behind

    [C#] ADO.NET #3-1 (GridView + DataReader + SqlCommand)完全手写.后置程序代码 之前有分享过一个范例 [C#] ADO.NET #3 (GridVi ...

  6. 你必须知道的ADO.NET

    原文:http://www.cnblogs.com/liuhaorain/archive/2012/02/06/2340409.html 1. 什么是ADO.NET? 简单的讲,ADO.NET是一组允 ...

  7. [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

    Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...

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

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

  9. 一个Entity Framework、ADO.NET查询性能测试

    Entity Framework自然是会比ADO.NET性能慢点,这个不多说了.直接上结果. 本该用测试项目的,不过我建了个aspx.下面是随便测20遍得到的结果 补充!!把12行改成 list = ...

随机推荐

  1. python笔记之列表与元组函数和方法使用举例

    在学习列表之前先了解了raw_input和input的区别:(仅适用于版本2,版本3中raw_input和input合并,没有raw_input) input的语法为:input("str& ...

  2. Qt plugin系统的几点说明

    对于一个大型软件系统来说,实现plugin是一件很美妙的事情,一个成功的plugin系统可以使软件增色不少.Plugin最大的功能是在一定程度内提高了软件的灵活度和可扩展性.一个设计精良的server ...

  3. Android EditText 无法换行

    问题 关于控制是否换行的属性android:singleLine 当值为true的时候,只能一行,不换行 当值为false的时候,可以换行 但是现在遇到一个问题: <EditText andro ...

  4. ios7状态栏属性的设置

    /* 状态栏的管理: 1> iOS7之前:UIApplication进行管理 2> iOS7开始:交给对应的控制器去管理 */ // 设置状态栏的样式 - (UIStatusBarStyl ...

  5. 1298 The Hardest Problem Ever

    题目链接:http://poj.org/problem?id=1298 思路分析:水题,字符偏移求解,注意字符串输入问题即可. 代码如下: #include <iostream> #inc ...

  6. GQ_百度百科

    GQ_百度百科 <GQ>杂志(原名<Gentlemen's Quarterly>,中文名<智族>)是一本男性月刊,内容著重于男性的时尚.风格.文化,也包括美食.电影 ...

  7. English learning method ---学英语重中之重打通“任督二脉”

    漫漫十年艰辛路,英语学习之旅 曾经秉承“路漫漫其修远兮,吾将上下而求索”的信念,初一那年了解到原来(a b c d e f g) 不仅仅读作(啊,波,词,的,额,佛,哥),在英语的世界中它有另外的读法 ...

  8. 初步swift语言学习笔记2(可选类型?和隐式可选类型!)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28904115 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...

  9. BZOJ 1800 fly-飞行棋

           这道题其实考察的就是从其中能找到几条直径,因为这次数据范围比较小,所以只需设一个二维数组,记录一下每个点及每个点从零开始的位置,最后定一个变量记录周长,最后用个循环搜一下位置小于周长一半 ...

  10. MyEclipse 引用其他项目及其jar包

    倘若在工作区有两个项目A和B,B项目引用A项目及其jar包(防止调用时A项目的方法出现NoClassFound),步骤如下: 在A项目上点右键看属性,点击Build Path--->Concon ...