首页 文章

如何检查DataTable是否包含DataRow?

提问于
浏览
0

我有一个非类型数据集,其中包含来自用户输入(无数据库)的数据 . 没有主键列(到目前为止,我的数据不需要主键)!如果我想检查新行用户是否尝试插入已存在于我的DataTable中,有没有办法避免“暴力”?我该如何进行检查?

4 回答

  • 0

    您可以为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);
    

    对于此示例,如果您尝试向表中添加一行 CustomerIDCompanyName 与具有相同 CustomerIDCompanyName 的另一行的副本,则会出现异常(类型为 ConstraintException ) .

    我会让 DataTable 在内部检查这些东西 - 没有必要重新发明轮子 . 至于它是如何做到的(无论它是否有效),都必须为你锻炼 .

  • 2

    你可以做的是使用DataView . Dataview允许您将where子句与DataView的数据一起使用 .

    检查一下 .

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

    更容易的方式:

    datatable.Columns.Contais("ColumnName")
    

相关问题