浅谈DataSet-数据库专栏,SQL Server
来源:作者: 发布时间:2007-12-25 13:52:38


dataset是ado.net研发人员为方便数据处理研发出来的,是数据的集合,是为解决datareader的缺陷设计的,datareader数据处理速度快,但他是只读的, 而且一旦移到下一行,就不能查看上一行的数据,dataset则能够自由移动指针。dataset的数据是和数据库断开的。dataset还可用于多层应用程式中,假如应用程式运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程式。
dataset的功能:浏览、排序、搜索、过滤、处理分级数据、缓存更改等。还能够和xml数据互换。dataset中可包括多个datatable,可将多个查询结构存到一个dataset中,方便操作,而datatable中又包括多个datarow、datacolumn,可通过这些datarow、datacolumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则能够调用dataadapter的update方法。
dataset的操作: dataset ds=new dataset(); datatable dt=new datatable("newtable"); ds.tables.add(dt);dataset ds=new dataset(); datatable dt=ds.tables.add("newtable"); 上述两种方法都能够在dataset中添加一个datatable,看需要而进行选择。添加datatable后,需向其中添加行和列。 dataset ds=new dataset(); datatable dt=ds.tables.add("newtables"); datacolumn col=dt.columns.add("newcolumn",typeof(int)); col.allowdbnull=false; col.maxlength=4; col.unique=true;
上述代码向dataset中的datatable中添加名为”newcolumn”,类型为int且不为空,最大长度为4和唯一性为真的列。 dt.primarykey=new datacolumn[]{dt.columns["id"]} 这段代码是继续上面代码的,为一个datatable中添加一个主键列,主键列是个数据组,如有多个主键,只需在数组中添加一个列即可。如下: dt.primarykey=new datacolumns[]{dt.columns["orderid"],dt.columns["productid"]} 添加外键: foreignkeyconstraint fk; fk=new foreignkeyconstraint(ds.tables["customers"].columns["customerid"],ds.tables["orders"].columns["customerid"]); ds.tables["orders"].constraints.add(fk); //上述代码假如已为cusomers表和orders创建了主键,此句为添加外键约束。 上述是根据customers表和orders表的customerid来创建约束。
下面介绍修改datarow中的内容: datarow dr=ds.tables["customer"].rows.find("anton"); if(dr==null)
else { dr.beginedit(); dr["companyname"]="newvalue"; dr["contactname"]="newvalue2"; dr.endedit(); } //上面代码通过row集合的find方法来在datatable中的行进行定位,找到"anton"行,再修改"anton"行中companyname列和contactname列的值。通过beginedit和endedit来缓存对行的修改,还可调用 canceledit为取消修改。 判断某列是否为空值: datarow dr=ds.tables["customers"].rows.find("aaa"); if(dr.isnull("contactname"); .. else dr["contactname"]=dbnull.value //这里判断contactname列是否为空,假如不是则为其赋空值,呵,很无厘头的做法,这里只为演示为列赋空值的做法。 删除datarow:
有两种方法能够删除datarow,delete方法和remove方法和removeat方法。其区分是delete方法实际上不是从datatable中删除掉一行,而是将其标志为删除,仅仅是做个记号,而remove方法则是真正的从datarow中删除一行,removeat方法是根本行的索引来删除。列: datarow dr=ds.tables["table"].rows.find("a"); ds.tables["table"].remove(dr); 或 ds.tables["table"].remove(index); //dr 为"a"所在的行,查出后将其删除,index为 "a"所在的索引号。关于dataset中的其用法,参照msdn
|
还没有关于此文章的相关评论!