我有一个非类型数据集,其中包含来自用户输入(无数据库)的数据 . 没有主键列(到目前为止,我的数据不需要主键)!如果我想检查新行用户是否尝试插入已存在于我的DataTable中,有没有办法避免“暴力”?我该如何进行检查?
您可以为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 的另一行的副本,则会出现异常(类型为 ConstraintException ) .
CustomerID
CompanyName
ConstraintException
我会让 DataTable 在内部检查这些东西 - 没有必要重新发明轮子 . 至于它是如何做到的(无论它是否有效),都必须为你锻炼 .
DataTable
你可以做的是使用DataView . Dataview允许您将where子句与DataView的数据一起使用 .
检查一下 .
要检查是否有任何重复尝试
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")
4 回答
您可以为DataTable手动创建唯一的constraints:
对于此示例,如果您尝试向表中添加一行
CustomerID
和CompanyName
与具有相同CustomerID
和CompanyName
的另一行的副本,则会出现异常(类型为ConstraintException
) .我会让
DataTable
在内部检查这些东西 - 没有必要重新发明轮子 . 至于它是如何做到的(无论它是否有效),都必须为你锻炼 .你可以做的是使用DataView . Dataview允许您将where子句与DataView的数据一起使用 .
检查一下 .
要检查是否有任何重复尝试
如果您希望能够插入重复的行但不希望抛出异常,则将主键设置为唯一的自增量int,然后您可以插入尽可能多的重复项,而无需检查是否该表包含该值 . 您可以设置主键值,如下所示....
更容易的方式: