c# - 如何从 MS Access 数据库中删除重复行 (C#)

标签 c# duplicate-data duplicates delete-row

我浏览了各种网站和代码,但似乎没有什么能结束我的痛苦。它们要么帮助查找和删除特定列的重复项,要么只从数据表中删除,而不是从底层数据库本身删除。我想从我的 mdb 文件的表“table1”中删除重复的行。

为了让我的要求更清楚:

  1. 表中的任何列都没有设置主键(我负担不起)
  2. 我想删除所有重复的行,只有一个! (顺序无意义)
  3. 我更喜欢从数据库中删除重复项,而不是在更新数据库本身之前首先检查是否存在这样的行(如果这是最后的手段,那是不可能的,那么这是受欢迎的)
  4. 重复行是指不明显的行。例如,在下面的示例中,只有第 3 行和第 5 行是重复的。我想删除其中任何一个。

          Name1  Name2    Name3
          tom    dick   harry
          tom    dick   mike
          ann    sara   mike
          sara   ann    mike
          ann    sara   mike
    

应按如下所示单击按钮从数据库中删除重复的行

     private void button1_Click(object sender, EventArgs e)
     {
         deletedupes();
     }

    private void deletedupes()
    {
        OleDbConnection con = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\hi.mdb");

        DataSet ds = new DataSet();
        OleDbDataAdapter da = new OleDbDataAdapter("select * from table1", con);
        con.Open();
        da.Fill(ds, "table1");

        // what could be rest of the code??
    }

提前致谢。是的,我是新手..

最佳答案

如果您还没有意识到,数据库引擎倾向于绝对地思考。如果您希望它删除一行,您必须告诉它如何识别该行。因此,主键。

话虽如此,通常但并非总是有两 (2) 种方法可以做到这一点:

  1. 查明 Access 是否支持告诉 DELETE 仅考虑“前 N 行”的语法,类似于 DELETE TOP 1 FROM ...
  2. 从您的表中获取一个不同的数据集,删除其中的所有行,然后将不同的行重新插入其中

第一个可能是可行的,但这取决于 Access 是否支持任何使其成为可能的语法。例如。 Microsoft SQL Server 支持在DELETE 之前执行语句SET ROWCOUNT 1,然后DELETE 将只删除1 行,然后停止。我不知道 Access 是否会这样做。

如果你有外键,第二个会很痛苦,但我会在这里冒险并假设因为你没有主键,你没有外键,所以数据完整性这不是真正的问题。

关于c# - 如何从 MS Access 数据库中删除重复行 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5600022/

相关文章:

c# - 关闭“查找和替换”对话框的键盘快捷方式

c# - 组合接口(interface)的代码契约

c# - 如何模拟一次请求时的主机文件

使用重写规则时,PHP 每个请求运行两个请求

php - Mysql - 仅在输出中重复行

c# - 在构建 .NET 应用程序之前从引用的类库执行方法以进行许可证检查

java - Spring Integration 并行处理,无需聚合

mysql - 重复的表,即使在重复的单词之间,单词的值也不同。查找仅具有特定值(value)的单词

ruby-on-rails - 使用 collection_select 时如何删除重复条目以获得唯一元素?出现错误 - 知道为什么吗?

mongodb - 出现重复 key 错误 dup key : { : undefined }