2016-03-21 73 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. 
}