A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董超 中级黑马   /  2012-6-4 16:54  /  2785 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    这个谁能点拨一下 视频看了几遍也没弄明白……

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

18 个回复

倒序浏览
DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet的能力不只是可以储存多个Table而已,还可以透过
DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet对象可以说是
ADO.NET中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说
我们是将DataAdapter对象当做DataSet对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、
DataTableTable包含若干DataRow。
    具体问题具体分析,你要说清楚你哪里不明白呐?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
我感觉我哪都不明白啊……自从看到数据库 就悲剧了
回复 使用道具 举报
董超 发表于 2012-6-4 17:58
我感觉我哪都不明白啊……自从看到数据库 就悲剧了

那你先差不多会用就好了~
回复 使用道具 举报
DataSet以我的理解其实就是一个“中间盒子”,把要操作的数据先拷贝到这个“中间盒子”,然后再操作这个“中间盒子”的数据,这样就算掉线了仍然可以用里面的数据,因为数据事先已经全部拿出来了。
但是同样有缺点:当对数据进行更行操作时,也是针对这个“中间盒子”里的数据,并没有同步更新到实际的数据表中。要更新实际数据表,需要更进一步的操作。

慢慢学。前面的大概学懂了再继续,否则感觉不懂就很打击。
另外多动手敲,不懂返回重复,再敲,直到很熟练...

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
DataSet是一个数据,可以通过适配器去获取数据填充到Dataset中,DataSet是在内存中,当适配器填充了数据集的时候,我们在程序中可以随意的操作数据集中的数据,然而达到数据的展示

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
同意楼上的  DataSet是在内存中 相当于把数据都填充到Dataset中然后再在里边读出数据 这样的话我们的数据就可以读出的很快了!!!嘿嘿  但是这对于数据量晓得应用还是可以的  如果是大量的数据的话 就要用DataReader了!!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
当DataSet存在内存中的时候,程序对内存的操作速度是最快的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
(转载)DataReader 从数据库中检索只读、只进的数据流。查询结果在查询执行时返回,在并存储在客户端的网络缓冲区中,直到您使用 DataReader 的 Read 方法对它们发出请求。 使用 DataReader 可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销。

例子见上一篇即可,说说使用DataReader的心得,在做项目中,有时候一个实体类中的字段又是另外一个实体雷,存在外键的关系。如下实体类源码 中就有2个这样的关系(高亮代码):

    using System;  
    using System.Collections.Generic;  
    using System.Text;  
     
    namespace BookShop.Model  
    {  
        [Serializable]  
        public class Book  
        {  
            /// <summary>  
            /// 图书编号  
            /// </summary>  
            private int id;  
     
            public int Id  
            {  
                get { return id; }  
                set { id = value; }  
            }  
     
            /// <summary>  
            /// 图书标题  
            /// </summary>  
            private string title;  
     
            public string Title  
            {  
                get { return title; }  
                set { title = value; }  
            }  
     
            /// <summary>  
            /// 图书作者  
            /// </summary>  
            private string author;  
     
            public string Author  
            {  
                get { return author; }  
                set { author = value; }  
            }  
     
            /// <summary>  
            /// 图书出版社  
            /// </summary>  
            private Publisher publisher;  
     
            public Publisher Publisher  
            {  
                get { return publisher; }  
                set { publisher = value; }  
            }  
     
            /// <summary>  
            /// 图书出版日期  
            /// </summary>  
            private DateTime publishDate;  
     
            public DateTime PublishDate  
            {  
                get { return publishDate; }  
                set { publishDate = value; }  
            }  
     
            /// <summary>  
            /// 图书ISBN编号  
            /// </summary>  
            private string isbn;  
     
            public string Isbn  
            {  
                get { return isbn; }  
                set { isbn = value; }  
            }  
     
            /// <summary>  
            /// 图书总字数  
            /// </summary>  
            private int wordsCount;  
     
            public int WordsCount  
            {  
                get { return wordsCount; }  
                set { wordsCount = value; }  
            }  
     
            /// <summary>  
            /// 图书价格  
            /// </summary>  
            private decimal unitPrice;  
     
            public decimal UnitPrice  
            {  
                get { return unitPrice; }  
                set { unitPrice = value; }  
            }  
     
            /// <summary>  
            /// 图书描述  
            /// </summary>  
            private string contentDescription;  
     
            public string ContentDescription  
            {  
                get { return contentDescription; }  
                set { contentDescription = value; }  
            }  
     
            /// <summary>  
            /// 图书作者描述  
            /// </summary>  
            private string authorDescription;  
     
            public string AuthorDescription  
            {  
                get { return authorDescription; }  
                set { authorDescription = value; }  
            }  
     
            /// <summary>  
            /// 图书作者评语  
            /// </summary>  
            private string editorComment;  
     
            public string EditorComment  
            {  
                get { return editorComment; }  
                set { editorComment = value; }  
            }  
     
            /// <summary>  
            /// 图书目录  
            /// </summary>  
            private string toc;  
     
            public string Toc  
            {  
                get { return toc; }  
                set { toc = value; }  
            }  
     
            /// <summary>  
            /// 图书的分类  
            /// </summary>  
            private Category category;  
     
            public Category Category  
            {  
                get { return category; }  
                set { category = value; }  
            }  
     
            /// <summary>  
            /// 图书点击  
            /// </summary>  
            private int clicks;  
     
            public int Clicks  
            {  
                get { return clicks; }  
                set { clicks = value; }  
            }  
     
        }  
    }

如果是这种关系,使用Datareader 就可能会出现异常,因为当代码读到 外键的时候,外键也要使用connection连接 这时就会抛出异常,所以

与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。

对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。就使用DataSet或DataTable比较合适。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
我建议你先去看看书,然后看老师的视频,这样虽然慢,但是效率会好很多。C#高级编程(中文第七版)这本书中有相关内容。
回复 使用道具 举报
DataSet是数据集,里面可以存放多个DataTable,建立的DataTable之间的关系也存放于DataSet之中。主要作用是在从数据库中取数据时,将取出的数据填充至DataSet中去,此时所有数据都存放在内存中,可对数据进行任意操作。一般在正式项目中,常会使用强类型的数据集。你可以在你的任意一个项目上单机右键,新添加一个项目,选择强类型数据集,这时你的解决方案管理器中会出现一个xsd文件,界面相当于一个设计器,可以在server explorer中将数据库中的数据表拖入该设计器,此时就生成了强类型数据集,不需要再用[]来调用某行某列,可以像操作对象一样用 .  来找到某一行某一列。 可以参考MSDN文档:http://msdn.microsoft.com/zh-cn/library/wha85tzb.aspx

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
ADO.NET DataSet 是 ADO.NET 的断开式结构的核心组件(可参考如下图片)。
DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。
因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。
DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关 DataTable 对象中数据的关系信息组成。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
呵呵  我觉得你还是把问题明白话一点  DataSet就像  举个例子  有两个苹果  一只手一个  互相交换苹果 然后你是不是就必须那个容器什么的把一个苹果放在里边呢?  呵呵  那个容器就相当于DataSet!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
        ADO.NET DataSet 是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,都会提供一致的关系编程模型。DataSet 表示整个数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系。
        使用 DataSet 的方法有若干种,这些方法可以单独应用,也可以结合应用。你可以:以编程方式在 DataSet 中创建 DataTable、DataRelation 和 Constraint,并使用数据填充表。
通过 DataAdapter 用现有关系数据源中的数据表填充 DataSet。使用 XML 加载和保持 DataSet 内容。

     

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
共用内存的容器(也叫驻存器),可以存放数据
可以对其数据增删查改,改变后的DataSet数据 再可以通过调用
调用Adapter的Update方法就可以将DataSet的改变保
存到数据库。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
当你从sql查询出数据并放入DataSet中,你可以把DataSet看成一个数据库
它的结构跟数据库一样,有表,表里有行有列
不过一般很少用DataSet,更多用DataTable,它跟表有一样的结构
不过要注意,当数据太多时就不能用DataSet了,因为DataSet是会占内存的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
简单地说,你可以跟DataReader对比一下,DataReader与数据库建立一条连接,读一条从数据库取一条,注意,datareader是在线的、只读的
Dataset就是一次把表里的数据取出来,存在本地内存里,可进行离线的读、写、修改、删除,正因为是离线的,所以如果要把操作后的结果再保存到数据库,就需要重新插入、修改、删除等操作

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王志波 于 2012-6-20 20:31 编辑

这个你可以看邹华栋老师讲的。DataSet是一个容器,Adapter相当于一辆卡车,用于把从数据库中查询到的数据运回到本地DataSet中(即放入内存中),因此在断开连接的情况下也可以对查询到的数据进行操作,需要时需更新回数据库,因为之前的所有操作都是在本地进行的。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
Dataset你就把他当作一个篮子,里面装有水果,蔬菜,什么的。当你要用的时候,从篮子里取出你需要的就行了!!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马