首页 > 开发 > 综合 > 正文

浅谈DataSet

2024-07-21 02:07:54
字体:
来源:转载
供稿:网友

   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
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表