Ich habe diesen Code bekam:Wie kann ich sicher eine Null zurückgeben, wenn ein ungültiger Datensatz gefunden wird?
private static QueuedReports GetSingleReportForUnit(string unit, int RptID, DateTime nextExDate)
{
ReportSchedule rs = ReportSchedulerSQL.GetReportSchedulerRecord(unit, RptID);
DateTime d8 = new DateTime(0001, 1, 1); //DateTime.Now.AddYears(1);
if (rs.NextExecution.Date == d8.Date)
{
;// return null; <= I get, "cannot access a closed stream" with this
}
QueuedReports qr = new QueuedReports();
qr.Unit = unit;
qr.ReportName = GetReportNameForID(RptID);
List<String> emailAddresses = ReportSchedulerSQL.GetEmailAddressesForUnitRpt(unit, RptID);
qr.AllEmailAddresses = string.Join(",", emailAddresses.ToArray());
qr.NextExecution = nextExDate;
qr.NextExecutionsBeginDateArg = GetNextExecutionsBeginDateArg(unit, RptID, nextExDate);
qr.NextExecutionsEndDateArg = GetNextExecutionsEndDateArg(unit, RptID, nextExDate);
return qr;
}
..., die sich von hier genannt:
private static IEnumerable<QueuedReports> GetAllFutureReportsForUnit(string unit, int RptID, DateTime finalDate)
{
List<QueuedReports> listToReturn = new List<QueuedReports>();
DateTime currentDate = DateTime.Now;
while (currentDate <= finalDate)
{
currentDate = ReportSchedulerConstsAndUtils.GetNextDateForUnitReportAfter(unit, RptID, currentDate);
var qr = GetSingleReportForUnit(unit, RptID, currentDate);
listToReturn.Add(qr);
}
return listToReturn;
}
Wenn ein gültiger Eintrag in GetSingleReportForUnit() gefunden wird, das heißt, ein " NextExecution "mit einem anderen Wert als" 0001, 1, 1 ", alles ist gut; Wenn dies nicht der Fall ist, wird mein Versuch, null zurückzusenden, aber zur Laufzeit mit "kann nicht auf einen geschlossenen Datenstrom zugreifen" fehlgeschlagen.
Wie kann ich die Ausführung von GetSingleReportForUnit() bei einem ungültigen Datum (1. Januar des Jahres 1) bewohnt rs.NextExecution?
QueuedReports ist eine benutzerdefinierte Klasse:
public class QueuedReports
{
public string Unit { get; set; }
public string ReportName { get; set; }
public DateTime NextExecution { get; set; }
public string AllEmailAddresses { get; set; }
public DateTime NextExecutionsBeginDateArg { get; set; }
public DateTime NextExecutionsEndDateArg { get; set; }
}
Warum sollte der Akt der Null Versuch der Rückkehr einen Stream zugreifen? AFAICT, es gibt keinen Stream in diesem Code, also WTH?
Können Sie den Stack-Trace veröffentlichen? –