当前位置:编程学习 > asp >>

ADO.NET的记忆碎片(四)

 

上篇 http://www.zzzyk.com/kf/201112/112880.html

 

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数据库中第一张表

 

再来用文字描述一下: www.zzzyk.com

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()方法之后自动生成的,下一讲是:如何自己手动操作这些对象。

 

作者 八神吻你

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,