现在的位置: 首页 > 综合 > 正文

.net中Dataset数据集的认识

2013年12月08日 ⁄ 综合 ⁄ 共 1816字 ⁄ 字号 评论关闭

        DataSet 是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 由一组 DataTable 对象组成,您可使这些对象与 DataRelation 对象互相关联。您还可通过使用 UniqueConstraint 和 ForeignKeyConstraint 对象在 DataSet 中实施数据完整性。

        其实个人对DataSet的认识还并不是很深,只最近在.net的开发中研究了下。在开发过程中,我们可以通过DataAdapter使用数据源中的数据生成和填充 DataSet 中的每个DataTable,DataAdapter的fill方法我们使用较多的2种填充数据集的重载方法:fill(DataSet);     fill(Dataset,TableName);

第一种情况:

       对同一个对象DataSet我们多次执行fill(DataSet)时,每次的查询结果都会填充到默认表“table0”中,后面的查询结果中,如果列名相同,就会和之前的列合并,如果不同,则在“table0”表中追加该列。对于查询的数据记录行的处理,和列的处理相同。比如:

      DataSet ds = new DataSet();

       MySQLDataAdapter mda1 = new MySQLDataAdapter(string.Format(”select user_id from users where nick=’xiaoju12′”), conn);

       MySQLDataAdapter mda2 = new MySQLDataAdapter(string.Format(”select key_id from base_info where user_id=’15703140′”), conn);

      mda1.fill(ds);

     mda2.fill(ds);

     此时ds的结构是这样的  

    ds.Tables[0].Rows[0]["user_id"].ToString()=1 , ds.Tables[0].Rows[0]["key_id"].ToString()=null;

    ds.Tables[0].Rows[1]["user_id"].ToString()=null , ds.Tables[0].Rows[1]["key_id"].ToString()=1;

    这样其实是不利于我们多表查询后DataSet数据集的操作,因为有些select语句的执行结果是未知的,所以要把我们要的数据精确定位到“table0”中rowid也就非常困难,这样DataSet数据集的操作也就非常不方便了。

第二种情况:

         对同一个对象DataSet我们多次执行fill(DataSet,TableName)时,只要DataTable不一样,每次的查询结果就会填充到指定的表名“TableName”中,这样不同的表的查询结果放到不同的表中,非常便于我们对查询结果进行定位并处理。

        DataSet ds = new DataSet();

       MySQLDataAdapter mda1 = new MySQLDataAdapter(string.Format(”select user_id from users where nick=’xiaoju12′”), conn);

       MySQLDataAdapter mda2 = new MySQLDataAdapter(string.Format(”select key_id from base_info where user_id=’15703140′”), conn);

      mda1.fill(ds,”users”);

     mda2.fill(ds,”base_info”);

     此时ds的结构是这样的

     ds.Tables["users"].Rows[0]["user_id"].ToString()=1;

     ds.Tables["base_info"].Rows[0]["key_id"].ToString()=1;

     所以对于同一个DataSet数据集,如果只涉及一张表的操作时,fill(DataSet)方法简洁便利。但如果涉及多张表的操作时,建议使用fill(DataSet,DataTable)方法,在多张表之间切换,数据定位准确、简单。

抱歉!评论已关闭.