【问题标题】:How to check if DataTable contains DataRow?如何检查 DataTable 是否包含 DataRow?
【发布时间】:2011-12-23 02:54:51
【问题描述】:

我有一个非类型化数据集,其中填充了来自用户输入的数据(无数据库)。没有主键列(到目前为止我的数据不需要主键)!如果我想检查新行用户尝试插入的数据表中是否已经存在,有什么方法可以避免“蛮力”?我应该如何进行检查?

【问题讨论】:

    标签: c# datatable dataset


    【解决方案1】:

    您可以做的是使用 DataView。 Dataview 允许您对 DataView 的数据使用 where 子句。

    这样检查。

    【讨论】:

    • 我不认为我理解你的答案...我已经填写了数据表,我只想检查即将添加的新行是否与其他行具有完全相同的数据已经存在于数据表中..
    • 对不起,我误会了。更正了我的答案。
    【解决方案2】:

    要检查任何重复尝试

    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】:

      您可以为您的 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.

      我只会让DataTable 在内部为您检查这些东西 - 没有必要重新发明轮子。至于如何它是如何做到的(无论它是否有效),对你来说必须是一个练习。

      【讨论】:

        【解决方案4】:

        更简单的方法:

        datatable.Columns.Contais("ColumnName")
        

        【讨论】:

          猜你喜欢
          • 2013-08-15
          • 2015-02-08
          • 1970-01-01
          • 2016-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多