【发布时间】:2011-12-23 02:54:51
【问题描述】:
我有一个非类型化数据集,其中填充了来自用户输入的数据(无数据库)。没有主键列(到目前为止我的数据不需要主键)!如果我想检查新行用户尝试插入的数据表中是否已经存在,有什么方法可以避免“蛮力”?我应该如何进行检查?
【问题讨论】:
我有一个非类型化数据集,其中填充了来自用户输入的数据(无数据库)。没有主键列(到目前为止我的数据不需要主键)!如果我想检查新行用户尝试插入的数据表中是否已经存在,有什么方法可以避免“蛮力”?我应该如何进行检查?
【问题讨论】:
您可以做的是使用 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 手动创建唯一的constraints:
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.
我只会让DataTable 在内部为您检查这些东西 - 没有必要重新发明轮子。至于如何它是如何做到的(无论它是否有效),对你来说必须是一个练习。
【讨论】:
更简单的方法:
datatable.Columns.Contais("ColumnName")
【讨论】: