您当前的位置: 首页 >  .net

ADO.NET的记忆碎片(四)

发布时间:2011-12-16 13:13:27 ,浏览量:0

 
DataSet类
DataSet 这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter 对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter 对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter 对象当做DataSet 对象以及数据源间传输数据的桥梁。
创建DataSet对象有两种方式:

1、DataSet ds = new DataSet(); 2、DataSet ds = new DataSet("MyDataSet");

第二种方法是加了一个string参数,目的是为新生成的DataSet对象的名称初始化。而第一种生成的DataSet对象是没有名称的。 用前面提到的DataAdapter的Fill()方法为ds创建存储结果的结构:

string strConn ="...";//连接字符串 string strSql = "select * from MytableName1"; SqlDataAdapter da = new SqlDataAdapter(strSql,strConn); DataSet ds = new DataSet(); da.Fill(ds,"MyTableName");

这个就会让查询结果保存在DataSet对象中的一个名为MyTableName的DataTable对象中。

四个类之间关系 
这边先讲一下DataSet、DataTable、DataColumn、DataRow这四个类之间关系。 首先DataSet就是像是一个数据库;DataTable就像是数据库中的一张表;DataColumn就好像是表中的字段的一些信息,如字段名称、类型;DataRow就像是表中的一条记录,而且DataSet数据的访问只可以通过这个row[索引]或者row[字段名称]或者row[DataColumn对象]来获取。那么这几者的关系是:DataSet包含着多个DataTable;DataTable包含着多个DataColumn和多个DataRow,用c#描述是:

DataSet ds = new DataSet("MyDataSet"); List<DataTable> tables = new List<DataTable>();

List < DataColumn> columns = new List< DataColumn>();
List< DataRow> rows = new List< DataRow>();
ds.Tables = tables; ds.Tables[0].Columns = columns; ds.Tables[0].Rows = rows; //ds.Tables[0]表示DataSet数据库中第一张表

再来用文字描述一下: DataSet对象有一个Tables属性是一个DataTable对象集合,存储这个所有的DataTable对象。 DataTable对象有一个Columns属性是一个DataColumn对象集合,存储这个所有的DataColumn对象。 DataTable对象有一个Rows属性是一个DataRow对象集合,存储这个所有的DataRow对象。 DataRow对象就像是表中的一条记录,而且只要想访问DataSet数据只可以通过这个DataRow对象,方式是: row[索引]或者row[字段名称]或者row[DataColumn对象]

DataTable对象

这个对象和DataReader对象相似,可以查看查询的结果,结果是作为行和列的集合公开。DataReader是为了性能考虑,只能基于流的方式查看结果集,不能修改数据,也不能返回前一行,提供我们的功能很少。但是DataTable对象有更加强大的功能,可以对数据进行修改、排序、筛选,其中还有两个主要的属性是Columns和Rows。 DataColumn对象

DataColumn对象定义DataTable的架构。在调用DataAdapter的Fill()方法之后,DataAdapter也为查询结果中的每一列创建了一个DataColumn对象,具有Name、Ordinal、DataType这几个基本属性。查看这个几个属性:

string strConn ="...";//连接字符串 string strSql = "select * from MytableName1"; SqlDataAdapter da = new SqlDataAdapter(strSql,strConn); DataSet ds = new DataSet(); da.Fill(ds,"MyTableName"); foreach(DataColumn col in ds.Tables["MyTableName"].Columns) {     Console.WriteLine("{0}--{1}",col.ColumnName,col.DataType); }

DataRow对象

当我们想要查看或者修改DataTable中的数据的时候,我们就必须要用到DataRow对象。遍历DataTable的第一列数据:

foreach(DataRow row in ds.Tables["MyTableName"].Rows) {     Console.WriteLine("{0}",row[0]); }

编写一个接受一个row的参数,显示,这一行的列名和值:

static void DisplayRow(DataRow row) {     foreach(DataColumn col in row.Table.Columns)     {         Console.Write("{0}:{1}  ",col.ColumnName,row[col]);     } }

遍历Table中的所有数据,可以配合使用DisplayRow():

foreach(DataRow row in ds.Tables["MyTableName"].Rows) {     //显示行号     Console.Write("{0}   ",ds.Tables["MyTableName"].Rows.IndexOf(row));     //显示行数据     DisplayRow(row);     Console.WriteLine();//换行 }

到目前为止我们发现我们使用的DataTable对象、DataColumn对象和DataRow对象都是在调用DataAdapter的Fill()方法之后自动生成的,下一讲是:如何自己手动操作这些对象。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106595博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0558s