如何检查DataTable是否包含DataRow

本文关键字:DataTable 是否 包含 DataRow 检查 何检查 | 更新日期: 2023-09-27 18:13:35

我有一个非类型数据集,其中填充了来自用户输入的数据(没有数据库)。没有主键列(我的数据到目前为止还不需要主键)!如果我想检查新行用户是否试图插入已经存在于我的数据表中,是否有任何方法可以避免"蛮力"?我应该如何进行检查?

如何检查DataTable是否包含DataRow

您可以手动为您的DataTable创建唯一的约束:

DataTable custTable = custDS.Tables["Customers"];
UniqueConstraint custUnique = new UniqueConstraint(new DataColumn[] 
    {custTable.Columns["CustomerID"], 
    custTable.Columns["CompanyName"]});
custDS.Tables["Customers"].Constraints.Add(custUnique);

对于本例,如果您试图向表中添加一行,其中CustomerIDCompanyName是具有相同CustomerIDCompanyName的另一行的副本,则会得到一个异常(类型为ConstraintException)。

我会让DataTable内部为你检查这些事情-没有必要重新发明轮子。至于如何做到这一点(是否有效),将不得不为您做一个练习。

你能做的就是使用DataView。Dataview允许您对Dataview的数据使用where子句。

要检查是否有重复,请尝试

if (table.Rows.Contain(PriKeyTypeValue)) /*See if a Primary Key Value is in 
the table already */
    continue;
else
    table.Row.Add(value1, value2, value3);

如果你希望能够插入重复的行,但不希望有一个异常抛出设置你的主键为唯一的自增int,那么你可以插入尽可能多的重复,而不必检查表是否包含该值。您可以像下面....那样设置主键值

DataTable table = new DataTable();
table.Columns.Add("Column", typeof(int));
DataColumn column = table.Columns["Column"];
column.Unique = true;
column.AutoIncrement = true;
column.AutoIncrementStep = 1; //change these to whatever works for you
column.AutoIncrementSeed = 1;
table.PrimaryKey = new DataColumn[] { column };

更简单的方法:

datatable.Columns.Contais("ColumnName")