2016-03-21 51 views
3

我有一個Windows控制檯應用程序。在這個Windows控制檯項目中,我將發送一封電子郵件。Foreach datatable沒有得到最後一行

它讓我非常困惑,因爲當我從.exe文件執行它時,我無法獲得發送電子郵件的最後一行 - 但是如果我正在從Visual Studio進行調試,它就會起作用。

我已經確保我創建的所有.dll都是Copy Local = True。但仍然無效。

這是我的代碼:

靜態無效的主要(字串[] args){

 DataSet dtPending = db.GetDataSet("GET_REMINDER_BACKDATE", CommandType.StoredProcedure); 
     DataTable ds = dtPending.Tables[0]; 

     System.Console.WriteLine("Start looking pending approval ...."); 
     System.Console.WriteLine(); 

     foreach (DataRow row in ds.Rows) 
     { 
      try 
      { 
       System.Console.WriteLine(" Process {0} ..", row["DestinationName"].ToString()); 

       db.AddParameter("RequestID", row["RequestID"].ToString()); 
       db.AddParameter("ServerUri", ConfigurationManager.AppSettings["MIS_url"]); 
       DataSet result = db.GetDataSet("GET_EMAIL_DATA_REMINDER", CommandType.StoredProcedure); 
       DataTable datas = result.Tables[0]; 

       foreach (DataRow data in datas.Rows) 
       {      Mail.Send(ConfigurationManager.AppSettings["mailSender"], row["DestinationEmail"].ToString(), "", data["EmailSubject"].ToString(), data["EmailContent"].ToString()); 
       } 
       System.Console.WriteLine(" Insert to pending approval log"); 
       InserReminderBackdateLog(Guid.Parse(row["RequestID"].ToString()), row["RefferenceNo"].ToString(), row["EmployeeID"].ToString(), row["SBU"].ToString(), "1"); 
       System.Console.WriteLine(); 
      } 
      catch (Exception ex) 
      { 
       //do nothing 
       System.Console.WriteLine(" Error : {0}", ex.Message); 
      } 
     } 
     System.Console.WriteLine("Finish ...."); 
     //System.Console.ReadKey(); 
    } 

這是因爲foreach或應用程序本身的?我在代碼中找不到我的錯誤。

+1

你使用的調試,並通過你的循環加強? – Dave

+0

你可以拿出'try' /'catch(Exception ex)'看看它是如何運行的嗎? – Enigmativity

+0

猜測要麼ds.Rows比你期望的要小一些,在這種情況下你不應該看到Console.WriteLine的*或*,如果他們在那裏但是電子郵件沒有被髮送然後datas.Rows是空的爲最後(其中一個?)數據集。添加一個「System.Console.WriteLine(」datas.Rows Count = {0}「,datas.Rows.Count);」 after = result.Tables [0];並看看它是什麼 - 它是否比你期望的要少? –

回答

0

試試這個: 而不是使用DataTable的,使用

DataSet ds = new DataSet(yourSqlCommandHere); 
SqlDataAdapter da = new SqlDataAdapter(); 
da.Fill(ds); 

取代你的foreach到

foreach(DataRow dr in ds.Tables[0].Rows) 
{ 
    //Your code here. 
}