DataColumn 对象

using System;
using System.Data.SqlClient;
using System.Data;

namespace Test
{
class Program
{
static void Main( string [] args)
{
DataTable dt
= new DataTable();

// 在一个DataTable中添加一个DataColumn,并对列进行设置
 DataColumn col1 = dt.Columns.Add();
col1.ColumnName
= " Col1 " ;
col1.DataType
= typeof ( int );
col1.DefaultValue
= 0 ;
col1.Unique
= true ;
col1.AllowDBNull
= false ;

// 创建并设置一个DataColumn,并添加到DataTable中
 DataColumn col2 = new DataColumn();
col2.ColumnName
= " Col2 " ;
col2.DataType
= typeof ( string );
col2.MaxLength
= 50 ;
dt.Columns.Add(col2);

// 使用DataTable的Columns属性所提供的ColumnCollection对象的Add()方法
 dt.Columns.Add( " Col3 " , typeof ( string )).MaxLength = 50 ;

// 创建多个DataColumn对象,使用DataTable的Columns属性所提供的ColumnCollection对象的AddRange()方法
 DataColumn col4 = new DataColumn( " Col4 " );
DataColumn col5
= new DataColumn( " Col5 " );
dt.Columns.AddRange(
new DataColumn[] { col4, col5 });

foreach (DataColumn col in dt.Columns)
{
Console.WriteLine(col.ColumnName);
}
Console.ReadKey();
}
}
}
复制代码

  DataColumn 构造函数有5个重载版本:

  1. DataColumn()
  2. DataColumn(string colName)
  3. DataColumn(string colName,Type dataType)
  4. DataColumn(string colName,Type dataType,string expression)
  5. DataColumn(string colName,Type dataType,string expression,MappingType mappingType)

  其中:

    colName:列名

    dataType:列的数据类型,为Type类所支持的成员

    expression:用于创建列的表达式

    mappingType:指定了在转换为 XML 文档时,列是如何映射到元素或属性的,可以指定为 Element、Attribute、SimpleContent、Hidden

  DataColumn 配置属性:

    AllowDbNull:是否允许空值

    AutoIncrement:是否自增

    AutoIncrementSeed:自增的初始值

    AutoIncrementStep:自增的递增值

    ColumnMapping:当转换为 XML 时如何映射,可以指定为 Element、Attribute、SimpleContent、Hidden

    ColumnName:列名

    DataType:数据类型,为Type类所支持的成员

    DateTimeMode:指定了DataSet 中 DateTime 列是如何进行串行化的,可以是 DataSetDateTime 枚举值之一

    DefaultValue:默认值

    Expression:用于计算列的值(或聚合值)的表达式

    ExtendedProperties:与列相关联的用户自定义信息

    MaxLength:文本类型的最大长度

    Namespace:从包含该列的 DataTable 或 DataSet 对象读取和写入 XML 时该列的命名空间

    Ordinal:该列在一个 DataColumnCollection 集合中的位置

    Prefix:XML 的前缀,它是从包含该列的 DataTable 或 DataSet 对象读取和写入 XML 时该列的 XML 命名空间的别名

    ReadOnly:该列是否只读

    Unique:该列值是否唯一

  DataColumnCollection 包含了一些 DataColumn 对象,DataTable 具有一个 DataColumnCollection 对象,可以通过 DataTable 的 Columns 属性来访问。我们使用这个属性来访问和管理 DataTable 中的列。DataColumnCollection 提供了一些成员,用于管理集合中的列。

  DataColumnCollection 类的关键方法:

    Add():向 DataColumnCollection 添加一个 DataColumn,这个方法有多个重载版本

    AddRange():把一个 DataColumn 数组的成员复制到一个 DataColumnCollection 的尾部

    CanRemove():返回一个标志,表示是否可以从 DataColumnCollection 删除一个 DataColumn 对象

    Clear():清空 DataColumnCollection 的所有列

    Contains():返回一个标志,表示 DataColumnCollection 是否包含了一个具有指定 ColumnName 的 DataColumn 对象

    CopyTo():把 DataColumnCollection 的所有元素复制到一个一维 DataColumn 数组

    IndexOf():返回一个基于0的索引,表示一个由 ColumnName 或 DataColumn 对象所指定的 DataColumn 在集合中第一次出现的位置,如果不存在这个列返回-1

    Remove():删除一个由 ColumnName 或 DataColumn 对象所指定的 DataColumn 对象

    RemoveAt():在 DataColumnCollection 中删除一个具有指定索引的 DataColumn 对象

  下例显示了如何添加一个经过计算产生的列:

using System;
using System.Data.SqlClient;
using System.Data;

namespace Test
{
class Program
{
static void Main( string [] args)
{
string connStr = @" Data Source=.;Initial Catalog=MyTest;Integrated Security=True; " ;
string sqlStr = " SELECT * FROM tb_SalesDetail " ;
SqlDataAdapter adp
= new SqlDataAdapter(sqlStr, connStr);
DataTable dt
= new DataTable();
adp.Fill(dt);
dt.Columns.Add(
new DataColumn( " Total " , typeof (Decimal), " UnitPrice*(1-Disc)*Qty " ));
foreach (DataRow row in dt.Rows)
{
Console.WriteLine(
" ID={0},UnitPrice={1},Disc={2},Qty={3},Total={4} " , row[ " ID " ], row[ " UnitPrice " ], row[ " Disc " ], row[ " Qty " ], row[ " Total " ]);
}

Console.ReadKey();
}
}
}
复制代码

  运行结果如下:

  下例显示了如何向一个显示父表数据的子 DataTable 添加一个列:

using System;
using System.Data.SqlClient;
using System.Data;

namespace Test
{
class Program
{
static void Main( string [] args)
{
string connStr = @" Data Source=.;Initial Catalog=MyTest;Integrated Security=True; " ;
string sqlStr = @" SELECT * FROM tb_SalesHeader;SELECT * FROM tb_SalesDetail; " ;
DataSet ds
= new DataSet();
SqlDataAdapter adp
= new SqlDataAdapter(sqlStr, connStr);
adp.TableMappings.Add(
" Table " , " tb_SalesHeader " );
adp.TableMappings.Add(
" Table1 " , " tb_SalesDetail " );
adp.Fill(ds);
DataRelation dr
= new DataRelation( " tb_SalesHeader_tb_SalesDetail " , ds.Tables[ " tb_SalesHeader " ].Columns[ " OrderID " ], ds.Tables[ " tb_SalesDetail " ].Columns[ " OrderID " ]);
ds.Relations.Add(dr);
ds.Tables[
" tb_SalesDetail " ].Columns.Add( " CustomerID " , typeof ( string ), " Parent(tb_SalesHeader_tb_SalesDetail).CustomerID " );
for ( int i = 0 ; i < ds.Tables[ " tb_SalesHeader " ].Rows.Count; i ++ )
{
DataRow rowHeader
= ds.Tables[ " tb_SalesHeader " ].Rows[i];
Console.WriteLine(
" Header:OrderID={0},CustomerID={1} " ,rowHeader[ " OrderID " ],rowHeader[ " CustomerID " ]);
foreach (DataRow rowDetail in rowHeader.GetChildRows(dr))
{
Console.WriteLine(
" \tDeatil:OrderID={0},DetailID={1},CustomerID={2} " ,rowDetail[ " OrderID " ],rowDetail[ " ID " ],rowDetail[ " CustomerID " ]);
}
}

Console.ReadKey();
}
}
}
复制代码

  运行结果如下:

  表达式列创建了一个经过计算的列,表示一条相关记录的信息。我们可以通过在父表列名前添加前缀 Parent. 引用父表记录中的一个列。如果由于多个数据关系的原因存在多个父表,就在括号内指定 DataRelation 的名称,把前缀 Parent(DataRelationName). 添加到父表的名称之前,因此上例中完全可以简写为:

    ds.Tables["tb_SalesDetail"].Columns.Add("CustomerID", typeof(string), "Parent.CustomerID");

我们也可以通过在子表列名前加前缀 Child. 来引用一个子表记录。

  此外,表达式列也支持下列聚合函数:

  AVG:所有值的平均数

  COUNT:值的数量

  MAX:最大值

  MIN:最小值

  STDEV:所有值的统计标准差

  SUM:所有值的和

  VAR:所有值的统计方差

  如果父记录不存在子记录,聚合函数将返回一个 null 。

转载于:https://www.cnblogs.com/cuimianxiong/archive/2012/02/08/2342990.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值