博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ADO.NET的记忆碎片(四)
阅读量:4595 次
发布时间:2019-06-09

本文共 2916 字,大约阅读时间需要 9 分钟。

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

转载于:https://www.cnblogs.com/lmfeng/archive/2011/12/08/2280306.html

你可能感兴趣的文章
2016计蒜之道复赛A 百度地图的实时路况
查看>>
How to get md5 and SHA1 in objective c (iOS sdk)
查看>>
代动词
查看>>
虚拟私有云(Virtual Private Cloud,专有网络)配置方式总结
查看>>
用Latex写学术论文: IEEE Latex模板和文档设置(\documentclass)
查看>>
JQuery和Js中,如何让ajax执行完后再继续往下执行?(已解决,示例)
查看>>
VMWare12pro安装Centos 6.9教程
查看>>
Spark笔记之使用UDF(User Define Function)
查看>>
区间DP UVA 10453 Make Palindrome
查看>>
JavaScript系列教程(七):函数
查看>>
江中微型统计分析软件V1.0版本完成
查看>>
彻底搞懂CNN中的卷积和反卷积
查看>>
iOS中画各种图形
查看>>
javascript中的面向对象
查看>>
VirtualBox 下 CentOS6.5 网络配置(NAT) (公司内部用)
查看>>
面向对象三大基本特性,五大基本原则
查看>>
User32.dll 函数的相关方法整理
查看>>
Bootstarp 水平垂直居中
查看>>
LInux Centos7 重装yum
查看>>
HDU 3802Ipad,IPhone
查看>>