2012-10-13 104 views
0

我解析一個逐行工作並插入數據庫的平面文件,但我想添加額外的步驟,實際上是額外的2個步驟。C#控制檯應用程序比較記錄到數據庫

首先,我只想要特定汽車製造商的召回記錄,我有一個名爲AutoMake的數據庫表,其中列出了我想包括的所有產品。我需要將該記錄與該表進行比較,以確保它是我想包含的其中一個製作記錄。

然後我需要做第二次檢查,以確保記錄不在我的數據庫中。 這是一個控制檯應用程序,我正在爲此使用實體。所以這裏是我的代碼,我瘋狂地試圖寫和重寫這個包括檢查,但我只是沒有得到它。

哦,不,這確實很重要,因爲如果有人可以幫我在正確的方向,我可以從那裏移動,但tokens[2]MAKETXTRCL_CMPT_IDtokens[23]RCL_CMPT_ID可以用來驗證記錄是否已經在數據庫中因爲它是唯一的值

public static void ParseTSV(string location) 
    { 
     Console.WriteLine("Parsing....."); 

     using (var reader = new StreamReader(location)) 
     { 
      var lines = reader.ReadToEnd().Split(new char[] { '\n' }); 

      if (lines.Length > 0) 
      { 
       foreach (string line in lines) 
       { 
        if (string.IsNullOrWhiteSpace(line)) 
        { 
        continue; 
        } 
        var tokens = line.Trim().Split(new char[] { '\t' }); 

        var recalls = new Recalls(); 

        recalls.RECORD_ID = tokens[0]; 
        recalls.CAMPNO = tokens[1]; 
        recalls.MAKETXT = tokens[2]; 
        recalls.MODELTXT = tokens[3]; 
        recalls.YEARTXT = tokens[4]; 
        recalls.MFGCAMPNO = tokens[5]; 
        recalls.COMPNAME = tokens[6]; 
        recalls.MFGNAME = tokens[7]; 
        recalls.BGMAN = tokens[8]; 
        recalls.ENDMAN = tokens[9]; 
        recalls.RCLTYPECD = tokens[10]; 
        recalls.POTAFF = tokens[11]; 
        recalls.ODATE = tokens[12]; 
        recalls.INFLUENCED_BY = tokens[13]; 
        recalls.MFGTXT = tokens[14]; 
        recalls.RCDATE = tokens[15]; 
        recalls.DATEA = tokens[16]; 
        recalls.RPNO = tokens[17]; 
        recalls.FMVSS = tokens[18]; 
        recalls.DESC_DEFECT = tokens[19]; 
        recalls.CONEQUENCE_DEFECT = tokens[20]; 
        recalls.CORRECTIVE_ACTION = tokens[21]; 
        recalls.NOTES = tokens[22]; 
        recalls.RCL_CMPT_ID = tokens[23]; 


        string connectionString = GetConnectionString(); 
        using (SqlConnection connection = new SqlConnection(connectionString)) 
        { 
         SqlCommand cmdIns = new SqlCommand(GetInsertSqlCust(recalls), connection); 
         connection.Open(); 
         cmdIns.ExecuteNonQuery(); 
         connection.Close(); 
         cmdIns.Dispose(); 
         cmdIns = null; 
        } 
       } 
      } 
     } 
    } 

回答

1

1:獲取ID來覈對 2:獲取其中搜索需要像

string strExpression=""; 
    (Datatable tdGeneric = dal.getsometable()) 

3做表:要檢查自動做出是否存在:

if (tdGeneric != null && tdGeneric.Rows.Count > 0) 
    { 
    strExpression = "tablecolumnsname = '" + recalls.MAKETXT + "' "; 
    tdGeneric.DefaultView.RowFilter = strExpression; 
    tdGeneric = tdGeneric.DefaultView.ToTable(); 
    if (tdGeneric.Rows.Count > 0) 
    { 
      //make exist 
    } 
    else 
    make don't exists 

    } 
    else 
{ 
    make don't exist skip that text file's record 
} 

4:如果存在,則檢查是否存在表中的記錄。

獲得原始表,搜索該錶針對你的情況特殊ID:

(Datatable tdGeneric2 = dal.getsometable()) 
if (tdGeneric2 != null && tdGeneric.Rows.Count > 0) 
     { 
     strExpression = "tablecolumnsname = '" + recalls.RCL_CMPT_ID + "' "; 
     tdGeneric2.DefaultView.RowFilter = strExpression; 
     tdGeneric2 = tdGeneric2.DefaultView.ToTable(); 
      if (tdGeneric2.Rows.Count > 0) 
     { 
       //record exist 
     } 
     else 
     record don't exists 
     } 
     else 
    { 
     record don't exist insert the record, or some flag to insert a record 
    } 
0

您可以利用緩存。在讀取文件之前取出所有的Make,然後在現有AutoMakes的List或Dictionary中查找以檢查AutoMake是否已經存在於數據庫中,或者它是否是新的。如果AutoMake是新的,則將該記錄插入數據庫中,並在List \ Dictionary中添加make。如果AutoMake已存在,則跳過該行並移至下一行。

相關問題