2012-12-25 275 views
2

我有以下代碼用於從文件讀取並填充我的數據庫。一切工作正常,但所有記錄都插入兩次。從數據庫中刪除重複項

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)

返回「假」,所以記錄插入兩次,但不知道如何解決這個問題每個其他時間。

我該如何消除這些重複? 感謝

編輯:文件內容顯示等名稱,日期,城市,血型,移動NUM和地址:

Mehtap塞利姆,1985年11月6日,凱里尼亞,FBRh +,05617584509,Yasemin聖編號:48 Edremit Kyrenia KKTC

+0

把你的INSERT命令中,如果代碼塊 – MethodMan

回答

2

它看起來像是你的代碼結構仍然允許寫入數據庫,即使條件語句是錯誤的,並且由於數據仍然在你的變量中,再次。嘗試將數據庫寫入封閉到相同的條件。至於爲什麼它每隔一段時間就會出現錯誤,我們需要查看文件的內容。

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(); 
     } 
    } 
} 
+0

我已經添加了文件中的內容作爲編輯 – mac007

+1

是的,我會改變一些其他的東西了。使用'while(!myReader.EndOfStream)'循環並放下if(info == null)break;'。創建並打開while循環之外的連接(使用using語句包含while循環)。 –

+0

@Mark Hall謝謝你..你的解決方案工作得很好.. – mac007