2011-11-06 278 views
0

我有一个非用户输入(无数据库)数据填充的非类型数据集。没有主键列(到目前为止,我的数据不需要主键)!有没有什么办法可以避免“蛮力”,如果我想检查新的行用户是否试图插入已存在于我的DataTable?我应该如何执行该检查?如何检查DataTable是否包含DataRow?

回答

2

您可以手动创建独特constraints你的DataTable:

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

在这个例子中,你会得到(ConstraintException类型的)一个例外,如果你尝试将行添加到其中CustomerIDCompanyName是另一行的重复使用相同的CustomerIDCompanyName表。

我只想让DataTable在内部为您检查这些事情 - 没有意义重新发明轮子。至于如何它(它是否有效),将不得不为你做一个练习。

+0

就是这样! TNX! – guest86

0

你可以做的是使用DataView。 Dataview允许你在DataView的数据中使用where子句。

检查它的方式。

+0

我不认为我明白你的答案......我已经填写的数据表,我只是想检查,如果新行是要被添加有完全相同的数据与其他行已经存在于数据表中。 – guest86

+0

对不起,我误解了。更正了我的答案。 – Haedrian

0

来检查任何重复尝试

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

如果您希望能够插入重复行,但不希望有甩建立主键作为一个独特的自我递增的整数,那么一个异常您可以根据感觉,而无需检查,看看表包含value.you可以设定像下面的主键值中插入多个副本....

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 }; 
0

很多,很多简单的方法:

datatable.Columns.Contais("ColumnName")