您的位置:首页 > 编程语言 > C#

关于DataSet,DataTable,DataRow的理解

2008-12-24 14:11 429 查看
 

刚开始的时候从书上得知DataSet,DataTable都是属于引用类型,虽然书说有例子,但是还是未能真正理解,直至最近的一次开发,对其使用的多了,终于有所明白,为了以后紧记,所以记了下来.

何为引用户类型呢,用字真的好难说明,但我举个例,就好容易明白了.

例:我要从一个叫DA1的DataSet中复制数据到到DA2,从我们以前的开发中,最常做的,当然就是将DA1赋值给DA2(如下)

DataSet DA2=new DataSet();

DA2=DA1

但这种做法在C#里面的引用类型中使用是达不到相要的效果的(即DA2和DA1是两个独立的对象,且值相同),虽然程序并不出错,DA2中的数据也的确是DA1中的数据,但性质就完全不同了,这里DA2和DA1应该理解为是同一个东西的两个名.也就是说,当你对DA2进行了修改后,对DA1进行查看,会发现他也是修改了的.所以当你程序中有需要复制多一个DA2进行修改,而且不引起DA1修改,要使用Copy(如下)

DataSet DA2=new DataSet();

DA2=DA1.Copy()

DataTable的使用也是一样,也有一个叫Copy的方法.但到最后了,当使用DataRow进行复制时,你会发现DataRow并没有一个叫Copy的方法,如果直接用DataTable.Add另一个表中的一行数时会提示"此行已属于另一个表",那是不是不能复制呢,不是,只是DataRow的复制方法不同,本人猜想可能是由于DataRow比较特殊他有一个隶属属性,也就是说,他不允许你创建一个空的DataRow对象,当你

DataRow DR1=new DataRow();

时会出现没有相关级别可操作.一定要改为

DataTable t=new DataTable();
DataRow r=t.NewRow();

才行,也就说,声明一个DataRow时,一定要指明是从哪个一表创建的新行.

,具体方法有两个(如下)

1.用DataRow.ItemArray
DataTable t=new DataTable();
DataRow r=t.NewRow();
r.ItemArray=oldRow.ItemArray;//oldRow在另一个表中foreach取得.
t.Rows.Add(r);

2.用DataTable.ImportRow()
t.ImportRow(oldRow);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dataset c#