标签:
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)方法,在多张表之间切换,数据定位准确、简单。
原文:http://blog.csdn.net/phphot/article/details/4049827
标签:
原文地址:http://www.cnblogs.com/ihibin/p/4383265.html