消除数据库中的重复项

Posted

技术标签:

【中文标题】消除数据库中的重复项【英文标题】:Eliminate duplicates from database 【发布时间】:2012-12-25 23:45:06 【问题描述】:

我有以下代码用于从文件中读取并填充我的数据库。一切正常,只是所有记录都插入了两次。

OleDbCommand c = new OleDbCommand();
c.Connection = GetConnection();
c.CommandText =
    @"CREATE TABLE patients (
        patientid AUTOINCREMENT PRIMARY KEY,
        firstlastname CHAR(50),
        birthdate CHAR(50),
        birthplace CHAR(50),
        gender CHAR(1),
        bloodtype CHAR(50),
        telnum CHAR(50),
        address CHAR(255)
    )";
c.ExecuteNonQuery();

string info = "";
string name = "";
string date = "";
string place = "";
string blood = "";
string num = "";
string address = "";
//Read from file and insert values to patient table
StreamReader myReader = new StreamReader("myPath/patient.txt");
while (true)

    info = myReader.ReadLine();
    if (info == null) break;

    if (info.Trim() != String.Empty)
    
        string[] words = info.Split(',');
        if (words.Length == 6)
        
            name = words[0].Trim();
            date = words[1].Trim();
            place = words[2];
            blood = words[3];
            num = words[4];
            address = words[5];
        
    

    string cmdText = "INSERT INTO patients (" +
      "firstlastname, birthdate, birthplace, bloodtype, telnum, address) " +
      "VALUES (?,?,?,?,?,?)";

    using (OleDbConnection cn = GetConnection())
    

        using (OleDbCommand cmd = new OleDbCommand(cmdText, cn))
        
            cmd.Parameters.AddWithValue("name", name);
            cmd.Parameters.AddWithValue("date", date);
            cmd.Parameters.AddWithValue("place", place);
            cmd.Parameters.AddWithValue("blood", blood);
            cmd.Parameters.AddWithValue("num", num);
            cmd.Parameters.AddWithValue("address", address);
            cmd.ExecuteNonQuery();
        
    



我注意到这条线 if (info.Trim() != String.Empty)

每隔一次返回“false”,因此记录被插入两次,但不知道如何解决这个问题。

我怎样才能消除这些重复? 谢谢

编辑:文件内容如姓名、日期、城市、血型、手机号码和地址:

Mehtap Selim, 11/06/1985, Kyrenia, FBRh+, 05617584509, Yasemin St. No:48 Edremit Kyrenia KKTC

【问题讨论】:

如果代码块将插入命令放入其中 【参考方案1】:

看起来你的代码结构仍然允许写入你的数据库,即使条件语句为假,并且由于数据仍然在你之前写入的变量中,它会再次写入它们。尝试将数据库写入包含在相同的条件中。至于为什么每隔一段时间就会出现错误,我们需要查看您文件的内容。

if (info.Trim() != String.Empty)

    string[] words = info.Split(',');
    if (words.Length == 6)
    
        name = words[0].Trim();
        date = words[1].Trim();
        place = words[2];
        blood = words[3];
        num = words[4];
        address = words[5];
    


    string cmdText = "INSERT INTO patients (" +
       "firstlastname, birthdate, birthplace, bloodtype, telnum, address) " +
       "VALUES (?,?,?,?,?,?)";

    using (OleDbConnection cn = GetConnection())
    
        using (OleDbCommand cmd = new OleDbCommand(cmdText, cn))
        
            cmd.Parameters.AddWithValue("name", name);
            cmd.Parameters.AddWithValue("date", date);
            cmd.Parameters.AddWithValue("place", place);
            cmd.Parameters.AddWithValue("blood", blood);
            cmd.Parameters.AddWithValue("num", num);
            cmd.Parameters.AddWithValue("address", address);
            cmd.ExecuteNonQuery();
        
    

【讨论】:

是的,我也会改变一些其他的东西。循环使用while (!myReader.EndOfStream) 并删除if (info == null) break;。在 while 循环之外创建并打开连接(使用 using 语句将 while 循环括起来)。 @mac007 很高兴能提供帮助,您还应该看看 Olivier 在您上面的评论中提到的内容。

以上是关于消除数据库中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

PHP 消除多维数组中的重复项

消除多维数组中的重复项

维护序列项顺序的同时消除重复项

消除MongoDB中具有特定排序的重复项

消除列表中重复项的最佳方法,但保持先前的相对顺序 [重复]

JAVA中消除list中重复项