【.Net实用方法总结】 整理并总结System.Data中ConstraintCollection类及其方法介绍

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
🐬个人主页:会敲键盘的肘子
🐰系列专栏:.Net实用方法总结
🦀专栏简介:博主针对.Net开发和C站问答过程中遇到的问题进行总结,形成本专栏,希望可以帮助到您解决问题。
🐶座右铭:总有一天你所坚持的会反过来拥抱你。


在这里插入图片描述

🌈写在前面:

本文主要介绍System.Data命名空间的 ConstraintCollection 类,介绍其常用的方法和实践。


👉本文关键字:System.Data、ConstraintCollection类、DataTable类、方法实践、C#

1️⃣ System.Data命名空间

提供对表示 ADO.NET 体系结构的类的访问权限。 通过 ADO.NET,可以生成可有效管理多个数据源的数据的组件。

2️⃣ ConstraintCollection类

♈ 定义

表示 DataTable 的约束集合。

public sealed class ConstraintCollection : System.Data.InternalDataCollectionBase

示例

第一个示例创建一个DataTableDataColumn,并将其Unique属性设置为true) 的 (添加到其中DataColumnCollection。 第二个示例创建一个、两DataTableDataSet对象、四列和一个DataRelation。 然后打印约束计数以显示在将对象添加到对象时创建 a ForeignKeyConstraint 和 a UniqueConstraint DataRelationDataRelationCollectionDataSet

private void MakeTableWithUniqueConstraint()
{
    DataTable table = new DataTable("table");
    DataColumn column = new DataColumn("UniqueColumn");
    column.Unique=true;
    table.Columns.Add(column);

    // Print count, name, and type.
    Console.WriteLine("Constraints.Count "
        + table.Constraints.Count);
    Console.WriteLine(table.Constraints[0].ConstraintName);
    Console.WriteLine(table.Constraints[0].GetType() );

    // Add a second unique column.
    column = new DataColumn("UniqueColumn2");
    column.Unique=true;
    table.Columns.Add(column);

    // Print info again.
    Console.WriteLine("Constraints.Count "
        + table.Constraints.Count);
    Console.WriteLine(table.Constraints[1].ConstraintName);
    Console.WriteLine(table.Constraints[1].GetType() );
}

private void MakeTableWithForeignConstraint()
{
    // Create a DataSet.
    DataSet dataSet = new DataSet("dataSet");

    // Make two tables.
    DataTable customersTable= new DataTable("Customers");
    DataTable ordersTable = new DataTable("Orders");

    // Create four columns, two for each table.
    DataColumn name = new DataColumn("Name");
    DataColumn id = new DataColumn("ID");
    DataColumn orderId = new DataColumn("OrderID");
    DataColumn cDate = new DataColumn("OrderDate");

    // Add columns to tables.
    customersTable.Columns.Add(name);
    customersTable.Columns.Add(id);
    ordersTable.Columns.Add(orderId);
    ordersTable.Columns.Add(cDate);

    // Add tables to the DataSet.
    dataSet.Tables.Add(customersTable);
    dataSet.Tables.Add(ordersTable);

    // Create a DataRelation for two of the columns.
    DataRelation myRelation = new
        DataRelation("CustomersOrders",id,orderId,true);
    dataSet.Relations.Add(myRelation);

    // Print TableName, Constraints.Count,
    // ConstraintName and Type.
    foreach(DataTable t in dataSet.Tables)
    {
        Console.WriteLine(t.TableName);
        Console.WriteLine("Constraints.Count "
            + t.Constraints.Count);
        Console.WriteLine("ParentRelations.Count "
            + t.ParentRelations.Count);
        Console.WriteLine("ChildRelations.Count "
            + t.ChildRelations.Count);
        foreach(Constraint cstrnt in t.Constraints)
        {
            Console.WriteLine(cstrnt.ConstraintName);
            Console.WriteLine(cstrnt.GetType());
        }
    }
}
♊ 属性
Count

获取集合中的元素总数

[System.ComponentModel.Browsable(false)]
public virtual int Count { get; }
Item[Int32]

从集合中获取位于指定索引位置的 DataColumn

public System.Data.Constraint this[int index] { get; }

示例

以下示例从中ConstraintCollection获取每个Constraint值。

private void GetConstraint(DataTable table)
{
    for(int i = 0; i < table.Constraints.Count; i++)
    {
        Console.WriteLine(table.Constraints[i].ConstraintName);
        Console.WriteLine(table.Constraints[i].GetType());
    }
}
Item[String]

从具有指定名称的集合中获取 Constraint

public System.Data.Constraint? this[string? name] { get; }

示例

以下示例获取命名 Constraint的 。

private void GetConstraint(DataTable table)
{
    if(table.Constraints.Contains("CustomersOrdersConstraint"))
    {
        Constraint constraint =
            table.Constraints["CustomersOrdersConstraint"];
    }
}
List

获取作为列表的集合的项。

protected virtual System.Collections.ArrayList List { get; }
♉ 常用方法
Add(Constraint)

将指定的 Constraint 对象添加到集合。

public void Add (System.Data.Constraint constraint);

示例

以下示例将 a UniqueConstraint 添加到 ConstraintCollection

private void AddConstraint(DataTable table)
{
    UniqueConstraint uniqueConstraint;
    // Assuming a column named "UniqueColumn" exists, and
    // its Unique property is true.
    uniqueConstraint = new UniqueConstraint(
        table.Columns["UniqueColumn"]);
    table.Constraints.Add(uniqueConstraint);
}
AddRange(Constraint[])

将指定的 ConstraintCollection 数组的元素复制到集合末尾。

public void AddRange (System.Data.Constraint[] constraints);

示例

以下示例创建主键和外键约束,并将其添加到其中 ConstraintCollection

public static void ConstraintAddRange(DataSet dataSet)
{
    try
    {
        // Reference the tables from the DataSet.
        DataTable customersTable = dataSet.Tables["Customers"];
        DataTable ordersTable = dataSet.Tables["Orders"];

        // Create unique and foreign key constraints.
        UniqueConstraint uniqueConstraint = new
            UniqueConstraint(customersTable.Columns["CustomerID"]);
        ForeignKeyConstraint fkConstraint = new
            ForeignKeyConstraint("CustOrdersConstraint",
            customersTable.Columns["CustomerID"],
            ordersTable.Columns["CustomerID"]);

        // Add the constraints.
        customersTable.Constraints.AddRange(new Constraint[]
            {uniqueConstraint, fkConstraint});
    }
    catch(Exception ex)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            ex.GetType());
    }
}
Clear()

清除集合中的所有列。

public void Clear ();

示例

public static void ClearConstraints(DataSet dataSet)
{
   foreach (DataTable table in dataSet.Tables)
     table.Constraints.Clear();
}
Contains(String)

指示集合中是否存在按名称指定的 Constraint 对象。

public bool Contains (string? name);

示例

下面的示例使用 Contains 该方法和 CanRemove 方法来确定是否可以删除列。 如果是,则删除该列。

public static void RemoveConstraint(
    ConstraintCollection constraints, Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.Remove(constraint.ConstraintName);
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}
IndexOf(Constraint)

获取指定 Constraint 的索引。

public int IndexOf (System.Data.Constraint? constraint);

示例

下面的示例使用 IndexOf 该方法返回 Constraint的索引。 在删除索引之前,会将索引传递给 Contains 方法,以确定集合是否包含约束。

private void RemoveConstraint(
    ConstraintCollection constraints, Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.RemoveAt(constraints.IndexOf(constraint));
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}

该方法 IndexOf 不区分大小写。

IndexOf(String)

获取按名称指定的 Constraint 的索引。

public int IndexOf (string? constraintName);

示例

下面的示例使用 IndexOf 该方法返回 a Constraint的索引。 索引将 Contains 传递给方法,以确定集合是否包含约束,然后再将其删除。

private void RemoveConstraint(
    ConstraintCollection constraints, Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.RemoveAt(
                    constraints.IndexOf(constraint.ConstraintName));
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}
Remove(Constraint)

从集合中移除指定的 Constraint

public void Remove (System.Data.Constraint constraint);

示例

private void RemoveConstraint(DataTable table,
    Constraint constraint)
{
    if(table.Constraints.Contains(constraint.ConstraintName))
        if(table.Constraints.CanRemove(constraint))
            table.Constraints.Remove(constraint);
}
Remove(String)

从集合中移除按名称指定的 Constraint 对象。

public void Remove (string name);

示例

以下示例使用该方法从测试后删除其ConstraintConstraintCollection状态Contains,以及是否可以使用CanRemove该方法将其删除。

private void RemoveConstraint(ConstraintCollection constraints,
    Constraint constraint)
{
    if(constraints.Contains(constraint.ConstraintName))
        if(constraints.CanRemove(constraint))
            constraints.Remove(constraint.ConstraintName);
}
RemoveAt(Int32)

从集合中的指定索引处删除 Constraint 对象。

public void RemoveAt (int index);

示例

以下示例将 IndexOf 该方法与方法一 RemoveAt 起使用,从中 ConstraintCollection删除约束。

private void RemoveConstraint(ConstraintCollection constraints,
    Constraint constraint)
{
    try
    {
        if(constraints.Contains(constraint.ConstraintName))
        {
            if(constraints.CanRemove(constraint))
            {
                constraints.RemoveAt(constraints.IndexOf(
                    constraint.ConstraintName));
            }
        }
    }
    catch(Exception e)
    {
        // Process exception and return.
        Console.WriteLine("Exception of type {0} occurred.",
            e.GetType());
    }
}
♋ 更多方法

更多方法请查阅官方文档ConstraintCollection类


⭐写在结尾:

文章中出现的任何错误请大家批评指出,一定及时修改。

希望写在这里的小伙伴能给个三连支持

  • 67
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 85
    评论
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会敲键盘的肘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值