2012-12-25 6 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)

반환 "false"로 그 기록을 두 번 삽입하지만,이 문제를 해결하는 방법을 잘 모릅니다되도록 다른 모든 시간.

어떻게 이러한 중복을 제거 할 수 있습니까?. 감사

편집 : 파일의 내용은 표시 이름, 날짜, 도시, 혈액형, 모바일 납입과 주소과 같습니다

Mehtap 셀 림, 1985년 11월 6일, 키레 니아, FBRh +, 05617584509, Yasemin 세인트 No : 48 Edremit Kyrenia KKTC

+0

내가 편집 – 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

경우 그 내에 삽입 명령을 넣어 나도 몇 가지 다른 일을 변경합니다. 'while (! myReader.EndOfStream)'으로 반복하고'if (info == null) 중단;을 버리십시오. while 루프 외부에서 연결을 만들고 엽니 다 (while 문을 using 문으로 묶습니다). – mac007

+1

예로 파일을 내용을 추가 한 코드 블록 –

+0

@ 마크 홀 감사합니다 .. 당신의 솔루션은 잘 작동했습니다 .. – mac007

관련 문제