DataSet,DataReader,DataTable关系

2024-03-14 00:38

本文主要是介绍DataSet,DataReader,DataTable关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简单说就是

 DataSet:数据集。一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable  
   
  DataTable:数据表。  
  一:  
  SqlDataAdapter da=new SqlDataAdapter(cmd);  
  DataTable dt=new DataTable();  
  da.Fill(dt);  
   
  -----------------  
  直接把数据结果放到datatable中,  
  二:  
  SqlDataAdapter da=new SqlDataAdapter(cmd);  
  DataSet dt=new DataSet();  
  da.Fill(dt);  
  ----------------  
  数据结果放到dataset中,若要用那个datatable,可以这样:dataset[0]  
  更常见的用法:  
  SqlDataAdapter da=new SqlDataAdapter(cmd);  
  DataSet dt=new DataSet();  
  da.Fill(dt,"table1");  
  用的时候:这样取datatable:  
  dataset["table1"]  
   


DataSet不能直接用来存储数据,如果仅用DataSet,它会自动的生成一个DataTable,所以看上去就像一个DataTable。  
   
  如果有很多个DataTable需要同时绑定到某个控件,就可以把多个DataTable添加到一个DataSet中,分别起不同的名字就可以了Top
DataReader基于连接,它返回的数据是只读只向前的,适合简单地浏览且耗时比较短的操作。DataSet对象会将所需数据读入内存然后断开连接。它适合对数据进行复杂长时间的操作,并且需要更新数据的情况。Top

SqlDataReader只是建立与数据库之间的类似于一个指针关系,在没有调用Read()方法之间它不从数据读出任何数据,而在调用Read()时也只是从数据库中读出一条数据.DATATABLE是数据表的一个复本,至于DataSet可以反它看作一个数据库,因为它不但可以包括多个表而且还能包括各表之间的关系.所以在进行大量数据访问时(特别是分页方式的访问)建议使用SqlDataReader,这样可以节省大量的内存开销.Top

DataSet就像内存数据库,  
  DataTable就是表,  
  库可以包含多个表,也可以包含表之间的关系。

 

2.DataReader DataTable DataSet 之间的转换

绑定Gridview里往往数据源是DataSet 或是DataTable 嗯 ,一些类库(SQLHelper等)里面的方法返回的是DataReader嗯 ,怎么把它们转成DataSet呢?

(1)
DataReader转为DataSet的类:


private   DataSet   DataReaderToDataSet(IDataReader   reader)    

{    

DataTable   table   =   new   DataTable();    

int   fieldCount   =   reader.FieldCount;    

for   (int   i   =   0;   i   <   fieldCount;   i++)    

{    

table.Columns.Add(reader.GetName(i),   reader.GetFieldType(i));    

}    

table.BeginLoadData();    

object[]   values   =   new   object[fieldCount];    

while   (reader.Read())    

{    

reader.GetValues(values);    

table.LoadDataRow(values,   true);    

}    

table.EndLoadData();    

DataSet   ds   =   new   DataSet();    

ds.Tables.Add(table);    

return   ds;    

}


(2)

注:DataAdapter与DataReader是不同的哦

DataAdapter可以这样做:

DataAdapter.Fill(ds)
(3)
#region DataReader转换为DataTable
 
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static DataTable ConvertDataReaderToDataTable(SqlDataReader reader)
        {
            try
            {
                DataTable objDataTable = new DataTable();
                int intFieldCount = reader.FieldCount;
                for (int intCounter = 0; intCounter < intFieldCount; ++intCounter)
                {
                    objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));
                }
                objDataTable.BeginLoadData();

                object[] objValues = new object[intFieldCount];
                while (reader.Read())
                {
                    reader.GetValues(objValues);
                    objDataTable.LoadDataRow(objValues, true);
                }
                reader.Close();
                objDataTable.EndLoadData();

                return objDataTable;

            }
            catch (Exception ex)
            {
                throw new Exception("转换出错!", ex);
            }
        }
        #endregion
http://space.itpub.net/14466241/viewspace-545525
http://didasoft.javaeye.com/blog/274670
http://www.cnblogs.com/phoenix-rock/archive/2006/10/31/interoperability-recordset-dataset.html
DataTable缓存数据操作:
http://space.itpub.net/12639172/viewspace-526838
如何将SqlDataReader绑定到DataGrid
http://smilecong.blog.51cto.com/121860/21972
C#中提供的精准测试程序运行时间的类Stopwatch
http://blog.csdn.net/genghuilove/archive/2008/11/21/3345638.aspx
c#中连接数据库SqlDataAdapter的用法
http://bbs.pfan.cn/showtxt.asp?id=106678
http://www.cnblogs.com/lvhaitao/archive/2006/12/25/602912.html
http://www.programfan.com/blog/article.asp?id=30259   DataReader用法
SqlDataAdapter它的用法有很多,比DataReader强大多了,感兴趣的朋友可以查查。DataReader是只读的,也就是单向的。而适配器呢,它既可以读又可以写。
读取Excel内容,导入数据库多张表!

 

 

这篇关于DataSet,DataReader,DataTable关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/806725

相关文章

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

数据依赖基础入门:函数依赖与数据库设计的关系

在数据库设计中,数据依赖 是一个重要的概念,它直接影响到数据库的结构和性能。函数依赖 作为数据依赖的一种,是规范化理论的基础,对数据库设计起着至关重要的作用。如果你是一名数据库设计的初学者,这篇文章将帮助你理解函数依赖及其在数据库设计中的应用。 什么是数据依赖? 数据依赖 是指同一关系中属性间的相互依赖和制约关系,它是数据库设计中语义的体现。在现实世界中,数据之间往往存在某种依赖关系,而这

c++ 和C语言的兼容性关系

C++ 和 C 语言有很高的兼容性,但也存在一些差异和限制。下面是它们的兼容性关系的详细介绍: 兼容性 C++ 是 C 的超集: C++ 语言设计为兼容 C 语言的语法和功能,大部分 C 代码可以在 C++ 编译器中编译运行。 标准库兼容性: C++ 标准库包含了 C 标准库的内容,如 stdio.h、stdlib.h、string.h 等头文件,但 C++ 的标准库也提供了额外的功能,如

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序

file-max与ulimit的关系与差别

http://zhangxugg-163-com.iteye.com/blog/1108402 http://ilikedo.iteye.com/blog/1554822

【编程底层原理】方法区、永久代和元空间之间的关系

Java虚拟机(JVM)中的内存布局经历了几个版本的变更,其中方法区、永久代和元空间是这些变更中的关键概念。以下是它们之间的关系: 一、方法区: 1、方法区是JVM规范中定义的一个概念,它用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 3、它是JVM运行时数据区的一部分,与堆内存一样,是所有线程共享的内存区域。 二、永久代(PermGen): 1、在Java SE 7之前,

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行平均得到相应的干净帧。 2、有效的原始视频去噪网络(RViDeNet),通过探