当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

4.4DataTable

8/31/2020 8:52:25 PM 人评论

4.4DataTable

4.4 DataTable

学习目标

掌握DataTable的详细使用方法。

DataTable是ADO.NET库中的核心对象。其他使用DataTable的对象包括DataSet和DataView。当访问 DataTable对象时,需要注意它们是区分大小写的。

如果正在以编程方式创建 DataTable,则必须先通过将 DataColumn对象添加到DataColumnCollection(通过Columns属性访问)中来定义其架构(类似于定义表结构)。

若要向DataTable中添加行,必须先使用NewRow方法返回新的DataRow对象。NewRow方法返回具有DataTable的架构的行,就像由该表的DataColumnCollection定义的那样。DataTable可存储的最大行数是16777216。

本节示例代码参考:/Code/ch04/StudyDataTable。

4.4.1 定义DataTable架构

DataTable包含了由表的Columns属性引用的DataColumn对象的集合。这个列的集合与任何约束一起定义表的架构(即结构)。

通过使用DataColumn构造函数,或者通过调用表的Columns属性的Add方法(它是一个DataColumnCollection),可在表内创建DataColumn对象。Add方法将接受可选的ColumnName、DataType和Expression参数,并将创建新的DataColumn作为集合的成员。它还会接受现有的DataColumn对象,将其添加到集合中,并会根据请求返回对所添加的DataColumn的引用。由于DataTable对象不特定于任何数据源,所以在指定DataColumn的数据类型时会使用 .NET Framework类型,也可以不指定数据类型。

//定义一个DataTable实例对象dt
DataTable dt = new DataTable("student");
//定义一个DataColumn实例对象column,并设置名称为id,类型选择整数
DataColumn column = new DataColumn("id", typeof(Int32));
//定义指定列不能取Null值
column.AllowDBNull = false;
//定义指定列取值唯一
column.Unique = true;
//将定义的列添加到指定的DataTable对象dt中
dt.Columns.Add(column);
//定义列name
column = new DataColumn("name", typeof(String));
dt.Columns.Add(column);
//定义列sex
column = new DataColumn("sex", typeof(String));
dt.Columns.Add(column);
//定义列city
column = new DataColumn("city", typeof(String));
dt.Columns.Add(column);

示例中用于id列的属性设置为不允许Null值并将值约束为唯一。但是,如果将id列定义为表的主键列,AllowDBNull属性就会自动设置为 false,并且 Unique属性会自动设置为 true。

如果没有为一个列提供列名,则在将该列添加到 DataColumnCollection时,该列会得到从“Column1”开始递增的默认名称 ColumnN。建议在提供列名时避免使用“ColumnN”命名约定,因为那样提供的名称可能与 DataColumnCollection中现有的默认列名冲突。如果提供的名称已经存在,将引发异常。

4.4.2 给DataTable中添加数据行DataRow

在创建DataTable并使用列和约束定义其结构之后,可以将新的数据行添加到表中。要添加新行,可将一个新变量声明为DataRow类型。调用NewRow方法时,将返回新的DataRow对象。然后,DataTable会根据DataColumnCollection定义的表结构创建DataRow对象。例如下面的代码就是给上面的DataTable添加一条记录。

//引用dt的结构定义一个DataRow实例对象row
//row的结构和dt架构一致
DataRow row = dt.NewRow();
//给当前新行的id列赋值
row["id"] = 1;
//给当前新行的name列赋值
row["name"] = "张三";
//给当前新行的sex列赋值
row["sex"] = "男";
//给当前新行的city列赋值
row["city"] = "北京";
//将定义好的行的信息添加到指定的DataTable对象dt中
dt.Rows.Add(row);

4.4.3 DataTable应用完整举例

(1)新建ASP.NET网站项目StudyDataTable,删除默认Default.aspx页面,添加页面StudyDataTable001.aspx。在页面StudyDataTable001.aspx的设计窗口添加GridView控件作为显示数据信息的容器,然后直接进入StudyDataTable001.aspx.cs代码窗口,编写完整Page_Load初始化代码如下,其中编写了大量注释,方便读者阅读。

protected void Page_Load(object sender, EventArgs e)
{
  //定义一个DataTable实例对象dt
  DataTable dt = new DataTable("student");
  //定义一个DataColumn实例对象column,并设置名称为id,类型选择整数
  DataColumn column = new DataColumn("id", typeof(Int32));
  //定义指定列不能取Null值
  column.AllowDBNull = false;
  //定义指定列取值唯一
  column.Unique = true;
  //将定义的列添加到指定的DataTable对象dt中
  dt.Columns.Add(column);
  //定义列name
  column = new DataColumn("name", typeof(String));
  dt.Columns.Add(column);
  //定义列sex
  column = new DataColumn("sex", typeof(String));
  dt.Columns.Add(column);
  //定义列city
  column = new DataColumn("city", typeof(String));
  dt.Columns.Add(column);
  //引用dt的结构定义一个DataRow实例对象row
  //row的结构和dt架构一致
  DataRow row = dt.NewRow();
  //给当前新行的id列赋值
  row["id"] = 1;
  //给当前新行的name列赋值
  row["name"] = "张三";
  //给当前新行的sex列赋值
  row["sex"] = "男";
  //给当前新行的city列赋值
  row["city"] = "北京";
  //将定义好的行的信息添加到指定的DataTable对象dt中
  dt.Rows.Add(row);
  row = dt.NewRow();
  row["id"] = 2;
  row["name"] = "王晓慧";
  row["sex"] = "女";
  row["city"] = "上海";
  dt.Rows.Add(row);
  row = dt.NewRow();
  row["id"] = 3;
  row["name"] = "刘志强";
  row["sex"] = "男";
  row["city"] = "北京";
  dt.Rows.Add(row);
  GridView1.DataSource = dt;
  GridView1.DataBind();
}

(2)按Ctrl+F5组合键,运行显示效果如图4-28所示。

图4-28 页面StudyDataTable001运行显示效果

4.4.4 定义主键

数据库表通常都有一列或一组列,用于唯一地标识表中的每一行。这种具有标识作用的列或列组称为主键。

在将一个单独的DataColumn标识为DataTable的PrimaryKey时,表会自动将列的AllowDBNull属性设置为 false,并将Unique属性设置为true。如果是多列主键,则只有AllowDBNull属性自动设置为false。

DataTable的PrimaryKey属性会将一个或多个DataColumn对象的数组接收为它的值,接下来举例说明。

(1)将单独一列定义为主键。

dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
//或者
DataColumn[] columns = new DataColumn[1];
columns[0] = dt.Columns["id"];
dt.PrimaryKey = columns;

(2)将两列组合定义为主键。

dt.PrimaryKey = new DataColumn[] { dt.Columns["id"], dt.Columns["name"] };
//或者
DataColumn[] columns = new DataColumn[2];
columns[0] = dt.Columns["id"];
columns[1] = dt.Columns["name"];
dt.PrimaryKey = columns;

4.4.5 定义表达式列

可以为列定义表达式(公式字段),让它能够包含根据同一行中其他列值或根据表中多行的列值计算而得的值。定义要计算的表达式,可使用目标列的Expression属性,并使用ColumnName属性在表达式中引用其他列。用于表达式列的 DataType必须适合于表达式将返回的值。接下来举例说明。

workTable.Columns.Add("Total", typeof(Double));
workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086");

4.4.6 维护已创建的DataTable

1.删除列

dt.Columns.Remove("sex");//删除dt的sex字段

2.修改列

dt.Columns["name"].ColumnName ="姓名";//修改dt的name列名称为“姓名”

3.删除行

dt.Rows.Remove(dt.Rows[0]);//参数必须是一个DataRow实例对象
dt.Rows.RemoveAt(0);//按照行的索引号删除

4. 修改指定行的某些列

dt.Rows[0]["id"] = 100;//修改行索引为0的id列值为100

上一篇:4.3操作数据库

下一篇:4.5DataSet

相关教程

共有条评论 网友评论

验证码: 看不清楚?