2016-03-21 16 views
3

ich eine Windows-Konsolenanwendung haben. In diesem Windows-Konsolenprojekt werde ich eine E-Mail senden.Foreach Datentabelle wird nicht die letzte Zeile

Es verwirrt mich so sehr, weil ich nicht die letzte Zeile eine E-Mail senden kann, wenn ich es aus einer Exe-Datei ausführen - aber wenn ich Debugging von Visual Studio es funktioniert.

habe ich schon dafür gesorgt, dass alle .dlls, die ich sind Copy Local = True erstellt. Aber es funktioniert immer noch nicht.

Dies ist mein Code:

static void Main (string [] 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(); 
    } 

Ist dies wegen der foreach oder der Anwendung selbst? Ich kann meinen Fehler im Code nicht finden.

+1

Haben Sie den Debugger verwendet und trat durch Ihre Schleife? – Dave

+0

Könnten Sie den 'try' /' catch (Exception ex) 'nehmen und sehen, wie es läuft? – Enigmativity

+0

bei einer Vermutung entweder ds.Rows ist ein kleiner, als man in diesem Fall erwarten Sie sollten nicht die Console.WriteLine der * oder * sehen, ob sie da sind, aber die E-Mail gesendet wird, dann nicht datas.Rows für die letzte leer ist (einer von?) die Datensätze. Hinzufügen eines "System.Console.WriteLine (" datas.Rows Count = {0} "datas.Rows.Count);" nach = Ergebnis.Tabellen [0]; und sehen, was es ist - ist es immer weniger als Sie erwarten? –

Antwort

0

versuchen Sie dies: statt Datentabelle zu verwenden, verwenden

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

in Ihrem foreach ersetzen

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