首页
登录 | 注册

DataSet简单使用

1步,创建到数据源的连接:

SQLConnection con =new SQLConnection("server=localhost;uid=sa;pwd=;database=pubs");

2步,创建DataSetCommand对象,指定一个存储过程的名字或者一个SQL语句,指定数据链路;

SQLDataSetCommand cmd =new SQLDataSetCommand("SELECT * FROM Authors", con);

3步,创建一个Dataset对象

DataSet ds = new DataSet();

4步,调用DataSetCommandFillData方法,为Dataset填充数据。注意:数据链路没有必要是打开的。如果数据链路是关闭状态,FillData函数会打开它,并在FillData之后关闭数据链路。如果数据链路本来就是打开的,在FillData之后,数据链路依然保持打开状态。

int iRowCount = cmd.FillDataSet(ds, “Authors”);

5步,操作数据。由于FillData返回了记录的个数,我们可以构造一个循环,来操纵Dataset中的数据。

for(int i=0; i< iRowCount; i++){

       DataRow dr = ds.Tables[0].Rows;

       Console.WriteLine(dr["au_lname"]);

}

下面它的使用:

5.3 DataSet的使用

1。概述

每一个DataSet都有很多个DataTables和Relationships。RelationShip 应该也是一种表,特殊的是,这个表只是用来联系两个数据表的。
每一个DataTable都有很多 datarows和 datacols, 也包括ParentRelations,ChildRelations 和一些限制条件象主键不可以重复的限制。
每一行有一个RowState属性。主要是反映当前行是否已经被删掉了,被更新了,还是根本没变。有如下的几个选项:   Deleted, Modified, New, and Unchanged.

2. 生成
A. 生成一个DataSet: 只需要一个名字: DataSet ds = new DataSet(" DataSetName " ) ;
B.生成DataTable并加入到DataSet中去: DataTable dt = ds.Tables.Add("TableName "   ) ;
C.生成DataColumn并加入到DataTable中去,需要给定一个名字和数据类型:  
DataColumn dc= dt.Columns.Add("colName", Type.GetType("System.String"   ) ) ;
D. 设定primary key 的 constraints:dt.PrimaryKey = new DataColumn[ ] {dc } ;
E. 生成relationship: 需要设定relation的名字和指定关联的两个DataColumn名字.
ds.Relations.Add("relationName", ds.Tables( " table1 ") .Columns( " columnA" ), ds.Tables("table2" ).Columns("columnB"   ));

3.合并两个DataSet/DataTable
(1) 合并规则
A. 检查primary key. 如果两个Table使用不同的primary key,那么他们不可能合并起来,抛出一个异常并触发 MergeFail 事件。如果两个Table的列名字相同,但是数据类型不同,也没法合并,最终也以抛出异常结束.
B. 如果在某一行上,两个Table的Primary key相同, 其他数据不同,这时就需要用户来选择继续使用表上原有的数据还是使用新的数据。有一个属性叫PreserveChanges就是管这个的. 如果 PreserveChanges 是真,则保留原来的数据,否则,使用新的数据. 进行合并时,调用起来是这样的A.Merge(B )。原有的数据是用A上的数据,新数据是指B上的数据。
C. 合并结束后,才会检查constrains. 如果有些Constrains的错误,会抛出异常的。

(2)代码很简单,就一句话:
DataSet1.Merge(DataSet2,true, MissingSchemaAction.AddWithKey);
MissingSchemaAction: 如果两个Table的Schema不相同时,设定需要执行的动作。有下列选项:
Add: 遇到新的Column,添加之
AddWithKey: 添加新的Column和 primary key
Error: 如果Schema不同就抛出InvalidOperationException 异常
Ignore: 忽略新的columns.

4.拷贝dataset
共有三种不同的拷贝
A. 拷贝整个DataSet
DataSet ds2 = ds1.Copy() ;

B. 只拷贝改变了部分
DataSet ds2 = ds1.GetChanges() ;

C. 只拷贝 schema
DataSet ds2 = ds1.Clone() ;

5.从DataSet 生成 DataView

为了生成一个DataView,必须指定 datatable, row filter, sort , selected row status, 代码如下:
DataView view1 = new DataView(DataSet1.Tables["table1"],
"Country = 'USA'", "City", DataViewRowState.CurrentRows);
country ='usa' 是row filter,满足这个要求的行才会被挑选出来。
city 是指在View中按照city排序
DataViewRowState 指定挑选出来的行的编辑状态。如:current, deleted, changed, new.. CurrentRows就是目前存在的行,不论是新添,还是修改过的,还是没修改过的。

6. DataSet 的事件(event)
在前面,介绍了DataSet有一个 MergeFailed 事件,EventHandler中可以调用这个Event的 Table和Conflict 属性来显示出错信息。
DataTable还有很多Event,例如: RowChanging, RowChanged, ColumnChanging, ColumnChanged, RowDeleting, RowDeleted.

7.自动生成有类型的数据集( typed dataset )
typed dataset 可以通过一个小工具来自动生成,叫 xsd.exe. 输入一个Schema,xsd.exe可以根据Schema给你自动生成一个DataSet类, 这个类继承于System.Data.DataSet,但是变量名都是使用Schema中的名字,可以结合intellisence方便使用。例如:

xsd /d /l:CS 2.xsd /n:FusionXml

/d: 从Schema生成一个DataSet的子类
/l: 编程语言的种类,如CS,VB,JS
/n: 命名空间namespace
/c: 生成数据结构那样的类


相关文章

  • 最近要使用一个嵌入式key value的数据库,最初选择是level db.不过在windows下编译非常麻烦,所以另外选择了Berkeley DB.使用也非常简单,可以从源码编译,也可以安装官方的安装版,然后copy出.h,.lib和.d ...
  • 本文就众多MQTT-Server中的mosquitto的安装进行讲解. 一.下载. 对于Ubuntu系统,可以使用sudo apt-get 来安装mosquitto,但是这种方法虽然简单,但是对于配置文件的修改和管理比较麻烦,配置文件需要自 ...
  • 操作简单且强大的四款软件,安装了就不可能卸载
    如果你不懂TeamViewer那你真的OUT了,全球就有将近10亿人在使用它,它是一款专业原创控制软件,操作简答,功能十分强大,也没有任何广告,对于个人而言还有免费版,同时还支持文件传输.视频电话.会议,全平台覆盖,还没使用的朋友赶紧安装吧 ...
  • 简单描述PHP发展历程
    PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP ...
  • 在.NET开发中经常会涉及到报表的开发,通常我们采用报表工具来快速生成报表,报表生成工具最常用的是水晶报表.Stimusoft Reports,下面我们以Stimulsoft Reports为例,做一个快速生成报表的教程,同时水晶报表也可以 ...
  • [.Net] Silverlight 4和Flash 10.1/AIR2简单对比和选择
    [转自:http://www.cnblogs.com/jv9/archive/2010/10/08/1845513.html]  2010-10-07 16:00 by jv9                    互联网经历过Web 2. ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
苏ICP备12049786号-20