• DataColumn


    DataColumn 是用于创建 DataTable 的列。下面示例使用不同技巧创建、配置一个列,并把它添加到一个 DataTable 中。

    复制代码
    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 添加一个列:

     1   string connStr = @"Data Source=.;Initial Catalog=MyTest;Integrated Security=True;";
     2             string sqlStr = @"SELECT * FROM tb_SalesHeader;SELECT * FROM tb_SalesDetail;";
     3             DataSet ds = new DataSet();
     4             SqlDataAdapter adp = new SqlDataAdapter(sqlStr, connStr);
     5 
     6 
     7             adp.TableMappings.Add("Table", "tb_SalesHeader");//列名
     8             adp.TableMappings.Add("Table1", "tb_SalesDetail");//行 数据
     9             adp.Fill(ds);
    10 
    11             //定义关系,关系的名称 父 子
    12            DataRelation dr = new DataRelation("tb_SalesHeader_tb_SalesDetail", ds.Tables["tb_SalesHeader"].Columns["OrderID"], ds.Tables["tb_SalesDetail"].Columns["OrderID"]);
    13             //获取用于将表链接起来并允许从父表浏览到子表的关系的集合。
    14             ds.Relations.Add(dr);
    15             ds.Tables["tb_SalesDetail"].Columns.Add("CustomerID", typeof(string), "Parent(tb_SalesHeader_tb_SalesDetail).CustomerID");
    16             for (int i = 0; i < ds.Tables["tb_SalesHeader"].Rows.Count; i++)
    17             {
    18                 DataRow rowHeader = ds.Tables["tb_SalesHeader"].Rows[i];
    19                 Console.WriteLine("Header:OrderID={0},CustomerID={1}", rowHeader["OrderID"], rowHeader["CustomerID"]);
    20                 foreach (DataRow rowDetail in rowHeader.GetChildRows(dr))
    21                 {
    22                     Console.WriteLine("	Deatil:OrderID={0},DetailID={1},CustomerID={2}", rowDetail["OrderID"], rowDetail["ID"], rowDetail["CustomerID"]);
    23                 }
    24             }
    25 
    26             Console.ReadKey();
    View Code

      运行结果如下:

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

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

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

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

      AVG:所有值的平均数

      COUNT:值的数量

      MAX:最大值

      MIN:最小值

      STDEV:所有值的统计标准差

      SUM:所有值的和

      VAR:所有值的统计方差

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

  • 相关阅读:
    python 类型注解
    python 装饰器
    python 高阶函数、柯里化
    python 生成器函数
    python 递归和匿名函数
    Python 函数返回值、作用域
    Python 练习题总结(待续)
    基于 K8S 集群安装部署 istio-1.2.4
    基于 kubeadm 部署 kubernetes(v1.17.0) 集群
    Gitlab 重置 root 密码
  • 原文地址:https://www.cnblogs.com/endv/p/4235942.html
Copyright © 2020-2023  润新知