如何检查DataTable是否包含DataRow
本文关键字:DataTable 是否 包含 DataRow 检查 何检查 | 更新日期: 2023-09-27 18:13:35
我有一个非类型数据集,其中填充了来自用户输入的数据(没有数据库)。没有主键列(我的数据到目前为止还不需要主键)!如果我想检查新行用户是否试图插入已经存在于我的数据表中,是否有任何方法可以避免"蛮力"?我应该如何进行检查?
您可以手动为您的DataTable创建唯一的约束:
DataTable custTable = custDS.Tables["Customers"];
UniqueConstraint custUnique = new UniqueConstraint(new DataColumn[]
{custTable.Columns["CustomerID"],
custTable.Columns["CompanyName"]});
custDS.Tables["Customers"].Constraints.Add(custUnique);
对于本例,如果您试图向表中添加一行,其中CustomerID
和CompanyName
是具有相同CustomerID
和CompanyName
的另一行的副本,则会得到一个异常(类型为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")