作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。
个人主页:会敲键盘的肘子
系列专栏:.Net实用方法总结
专栏简介:博主针对.Net开发和C站问答过程中遇到的问题进行总结,形成本专栏,希望可以帮助到您解决问题。
座右铭:总有一天你所坚持的会反过来拥抱你。
写在前面:
本文主要介绍System.Data命名空间的 ConstraintCollection 类,介绍其常用的方法和实践。
本文关键字:System.Data、ConstraintCollection类、DataTable类、方法实践、C#
提供对表示 ADO.NET 体系结构的类的访问权限。 通过 ADO.NET,可以生成可有效管理多个数据源的数据的组件。
表示 DataTable 的约束集合。
public sealed class ConstraintCollection : System.Data.InternalDataCollectionBase
示例
第一个示例创建一个DataTableDataColumn,并将其Unique属性设置为true
) 的 (添加到其中DataColumnCollection。 第二个示例创建一个、两DataTable个DataSet对象、四列和一个DataRelation。 然后打印约束计数以显示在将对象添加到对象时创建 a ForeignKeyConstraint 和 a UniqueConstraint DataRelation。DataRelationCollectionDataSet。
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());
}
}
}
获取集合中的元素总数
[System.ComponentModel.Browsable(false)]
public virtual int Count { get; }
从集合中获取位于指定索引位置的 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());
}
}
从具有指定名称的集合中获取 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"];
}
}
获取作为列表的集合的项。
protected virtual System.Collections.ArrayList List { get; }
将指定的 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);
}
将指定的 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());
}
}
清除集合中的所有列。
public void Clear ();
示例
public static void ClearConstraints(DataSet dataSet)
{
foreach (DataTable table in dataSet.Tables)
table.Constraints.Clear();
}
指示集合中是否存在按名称指定的 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());
}
}
获取指定 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 不区分大小写。
获取按名称指定的 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());
}
}
从集合中移除指定的 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);
}
从集合中移除按名称指定的 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);
}
从集合中的指定索引处删除 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类。
⭐写在结尾:
文章中出现的任何错误请大家批评指出,一定及时修改。
希望写在这里的小伙伴能给个三连支持!