我有一个非类型数据集,其中包含来自用户输入的数据(无数据库)。没有主键列(到目前为止,我的数据不需要主键)!如果我想检查新行用户是否尝试插入已存在于我的DataTable中,有没有办法避免“暴力”?我该如何进行检查?
答案 0 :(得分:2)
您可以为DataTable手动创建唯一的constraints:
DataTable custTable = custDS.Tables["Customers"];
UniqueConstraint custUnique = new UniqueConstraint(new DataColumn[]
{custTable.Columns["CustomerID"],
custTable.Columns["CompanyName"]});
custDS.Tables["Customers"].Constraints.Add(custUnique);
对于此示例,如果您尝试在ConstraintException
和CustomerID
与另一行重复的表中添加行,则会出现异常(类型为CompanyName
)相同的CustomerID
和CompanyName
。
我会让DataTable
在内部检查这些东西 - 没有必要重新发明轮子。至于 它是如何做到的(无论它是否有效),都必须为你练习。
答案 1 :(得分:0)
您可以使用DataView。 Dataview允许您使用带有DataView数据的where子句。
检查一下。
答案 2 :(得分: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);
如果您希望能够插入重复的行,但又不想抛出异常,则将主键设置为唯一的自增量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 };
答案 3 :(得分:0)
更容易的方式:
datatable.Columns.Contais("ColumnName")