2012-11-05 40 views
0

將文件解析爲可數據如果允許它添加空值(假設它們對於csv文件中的該行沒有值)?將文件解析爲數據表時允許爲空值

string fileName = @".csv"; 

using (StreamReader stream = new StreamReader(fileName)) 
{ 

    DataTable dt = CsvParser.Parse(stream); 

    foreach (DataRow row in dt.Rows) 
    { 
     try 
     { 
      string lname = Convert.ToString(row[0].ToString().Trim()); 
      string fname = Convert.ToString(row[1].ToString().Trim()); 
      long s = Convert.ToInt64(row[2]); 
      string b = Convert.ToString(row[3]); 
      rec = row[0].ToString() + "," + 
        row[1].ToString() + "," + 
        row[2].ToString() + "," + 
        row[3].ToString() + ","; 
      write.WriteLine(rec); 
     } 

    } 
} 
+1

你能描述一下'CsvParser'是什麼嗎? – GolfWolf

+0

如果CSV文件中沒有行的值,那麼數據庫中沒有行。你的意思是「如果細胞/柱子沒有價值?」 – Slugart

+0

是,如果它們在該列的單元格中沒有值。 – LewSim

回答

0

這取決於您在文件中代表的null是什麼。基於你展示什麼,又好像whitepsace字符串null(你在每一個呼叫Trim),所以你可以只檢查這一點,做到以下幾點:

foreach (DataRow row in dt.Rows) 
{ 
    // Get values. 
    string lname = row[0].Field<string>().Trim(); 
    string fname = row[1].Field<string>().Trim(); 
    string sString = row[2].Field<string>().Trim(); 
    string b = row[3].Field<string>().Trim(); 

    // Format/parse. 
    lname = lname == "" ? null : lname; 
    fname = fname == "" ? null : fname; 
    long? s = sString == "" ? (long?) null : Convert.ToInt64(sString); 
    string b = b == "" ? null : b; 

    // Process the values. 
} 

注意,根據CsvParser的實現是什麼,你可能會回到DbNull而不是實際的空白字符串。請注意,Field的調用將處理該轉換爲null如果您使用它(但是如果它是null,則必須小心不要致電Trim,否則將拋出NullReferenceException)。

+0

獲取字段參數的錯誤沒有重載方法..我只需要允許s和b值的空值/空值 – LewSim

+0

@LewSim您需要['DataRowExtensions'](http://msdn.microsoft.com/zh-cn/ us/library/bb360891.aspx)類來使用Field的擴展方法。 – casperOne

0

這工作和accpet null值。

foreach (DataRow row in dt.Rows) 
        { 
         try 
         { 

           string lname = row[0].ToString(); 
           string fname = row[1].ToString(); 

           string ss1 = row[2].ToString(); 
           long? s = ss1 == "" ? (long?)null : Convert.ToInt64(ssn1); 

           string dob1 = row[3].ToString(); 
           string b = dob1 == "" ? null : dob1;