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

  • Post author:
  • Post category:其他


🐋作者简介:博主是一位.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


示例

第一个示例创建一个

DataTable


DataColumn

,并将其

Unique

属性设置为

true

) 的 (添加到其中

DataColumnCollection

。 第二个示例创建一个、两

DataTable



DataSet

对象、四列和一个

DataRelation

。 然后打印约束计数以显示在将对象添加到对象时创建 a

ForeignKeyConstraint

和 a

UniqueConstraint


DataRelation



DataRelationCollection


DataSet

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);


示例

以下示例使用该方法从测试后删除其

Constraint


ConstraintCollection

状态

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类


⭐写在结尾:

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

希望写在这里的小伙伴能给个

三连支持



版权声明:本文为baidu_33146219原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。