DataSet对象的核心是一组数据,当开发人员显示一个查询的结果时,通常是在网格中显示数据,非常类似与Microsoft Excel电子表格。可以使用DataSet来存储查询结果,但是DataSet更类似与Excel的工作簿,这是因为它能存储多个查询的结果。
DataSet中的数据是与数据库断开连接的,一旦使用DataReade对象提取了一个查询的结果,并将这些结果存储在DataSet之后,DataSet和数据库之间便不再有连接。DataSet内容进行修改不会直接影响到数据库。数据库中的内容修改也不会直接影响DataSet中的数据。
一、使用DataSet对象。
DataSet包含DataTable对象和DataRelation对象。DataTable对象包含DataRow,DataColumn和Constraint对象。这些类都存在与Syetem.Data命名空间中。
1、 创建DataSet对象
DataSet ds = new DataSet("st");//创建一个DataSet对象并设置DataSetName属性为st.
DataSet ds = new DataSet();//创建一个DataSet对象。
2、 DataTable对象
每个DataTable对象都有一个Columns属性,用来返回DataColumn对象的一个集合,各个DataColumn对应于查询结果中的一列。
3、DataColumn对象
简单来说DataColumn对象定义DataTable的架构。当使用DataAdapter类的Fill方法创建新的DataTable时,DataAdapter也为查询结果中的每一列创建了一个DataColumn对象。DataAdaoter创建的新DataColumn对象仅具有最基本的属性设置:Name,Ordinal和DataType
string strConn, strSql;
strConn = @"provider=microsoft.jet.oledb.4.0;data source=d:"st.mdb";
strSql = "select * from 学生";
OleDbDataAdapter da = new OleDbDataAdapter(strSql, strConn);
DataSet ds = new DataSet("st");
da.Fill(ds,"学生");
foreach(DataColumn col in ds.Tables["学生"].Columns)
{
Console.Write("{0}-----{1}",col.ColumnName,col.DataType);
}
Datacolumn对象中还有其他信息。
4、DataRow对象
DataTable类公开了一种Rows属性,该属性返回DataTable中可用DataRow对象的集合。
DataRow类允许查看和修改DataTable中行的内容。为了访问DataTable中一特定行的DataRow对象,可以使用DataTable对象的Rows属性。该属性返回一个DataRowCollection对象,其包含了DataRow对象集合。与大多数集合类相似,DataRowCollection类允许指定一个整数,以指示希望访问的项。
下面的代码使用DataAdapter类的Fill方法提取查询结果,并将其放置在一个新的DataTable对象中,然后此代码,访问返回的第一行,并显示其中该行的两列信息。
string strCon, strSql;
strCon=@"provider=microsoft.jet.oledb.4.0;data source=d:"st.mdb";
strSql="select * from 学生";
OleDbDataAdapter da=new OleDbDataAdapter(strSql,strCon);
DataSet ds=new DataSet();
da.Fill(ds,"学生");
DataRow row =ds.Tables["学生"].Rows[0];
Console.Write("姓名={0}",row["姓名"]);
Console.Write("年龄={0}",row["年龄"]);
如果想编写一个更一般的例程来显示DataRow中的内容,应该怎么做呢?假设编写一个过程,其接受一个DataRow对象并显示该DataRow中包含的列名称和值。
如果正在编写使用DataReader类的代码,可以检查它的FieldCount属性来确定类的数量,然后通过使用GetName属性和Item属性来获取每一列的名称和值,但是DataRow中并没有与DataReader类的FieldCount属性对应的属性。取而代之的是,DataRow类公开了Table属性。该属性返回其DataRowCollection包含的DataRow的DataTable。可以通过使用该属性返回DataTable来获取列的总数以及每列的名称。
下面实例就是使用DataRow对象的Table属性来显示DataRow的内容(包括列的名称)
static void DisplayRow(DataRow row)
{
foreach (DataColumn col in row.Table.Columns)
Console.Write("{0}-{1}", col.ColumnName, row[col]);
}
上面代码介绍了查看特定列内容的另一种方法,DataRow对象的Item方法接受一个DataColumn对象。Item属性并非实际出现在上面代码段中,这是因为它是DataRowCollection类的默认属性。就这段代码而言,与基于序号的查询相比,通过提供DataColumn来提取行的内容要略好些(大约要快6%)。
【1】查看DataTable中的DataRow对象。
下面代码是循环遍历有DataAdapter.fill所创建的DataTable的内容,它依赖于前面代码中编写的DisplayRow过程。
string strCon, strSql;
strCon = @"provider=microsoft.jet.oledb.4.0;data source=d:"st.mdb";
strSql = "select * from 学生";
OleDbDataAdapter da = new OleDbDataAdapter(strSql, strCon);
DataSet ds = new DataSet();
da.Fill(ds,"学生");
foreach (DataRow row in ds.Tables["学生"].Rows)
{
Console.WriteLine("contents of row #{0}", ds.Tables["学生"].Rows.IndexOf(row));
DisplayRow(row);
}
【2】校验DataSet中的数据
(1)、验证DataColumn的属性
DataColumn对象提供了许多能够用来验证数据的属性
。ReadOnly 确保数据有效的最简单方法是不让用户修改它。
。AllowDbNull 设置某列是否允许为空。
。MaxLength(最大长度)
。Unique(唯一性)
(2)DataTable类的Constraints集合
也可以通过设置DataSet中的DataTable对象的属性来验证DataSet中的数据。Ado.net中有两个类可以用来设置DataTable中的约束。这些类(UniqueConstrains和ForeignkeyConstraint)都是由Constraint类派生的,列出如下。DataTable公开一个Constraints属性,使用该属性可以添加、修改和查看DataTable上的约束。
。UniqueConstraint 如果将DataColumn的Unique属性设置为True,也就在包含该列的DataTable里定义了一个唯一的约束。同时,还将UniqueConstraint对象添加到DataTable对象的Constraints集合中。设置DataColumn的Unique属性比在DataTable对象的Constraints集合中chaugnjian一个新的UniqueConstraint要简单。但是,在某些情况下会希望显示创建UniqueConstraint,例如在需要确保多累合并后的值是唯一时。
。PrimaryKey DataTable类允许通过PrimaryKey属性为DataTable定义一个主键,但不存在PrimaryKey类。DataTable的PrimaryKey属性包含DataColumn对象的一个数组,DataTable使用该数组来构造一个UniqueConstraint,以支持主键约束
。ForeighKeyConstraint 添加外部约束到DataTable中。
DataTable对象
一、创建DataTable对象
前面已经学习了通过DataAdapter的Fill来生成DataTable对象,下面学习如何创建自己的DataTable对象,尤其是希望使用列级或表级限制来验证数据时。
1、创建DataTable对象
可以采用创建DataSet对象的相同方式来创建DataTable对象。DataTable拥有一个可选构造函数,可用来设置DataTable对象的TableName属性。
DataTable tb1 = new DataTable("学生");
Console.Write(tb1.TableName);
2、向DataSet中的Tables集合中添加DataTable
在创建DataTable之后,可以利用DataTableCollection类的Add方法,将其添加到已有的DataSet对象的Tables集合中。
DataSet ds = new DataSet();
DataTable tb1 = new DataTable("学生");
ds.Tables.Add(tb1);
3、向DataTable中添加Column为了存储查询结果,DataTable中需要一些列。
浙公网安备 33010602011771号