public static bool HasCruiseErrors(CruiseDatastore dal, out string[] errors) { bool hasErrors = false; var errorList = new List <string>(); if (dal.HasForeignKeyErrors(null)) { errorList.Add("File contains Foreign Key errors"); hasErrors = true; } if (HasMismatchSpecies(dal)) { errorList.Add("Tree table has mismatch species codes"); hasErrors = true; } if (HasSampleGroupUOMErrors(dal)) { errorList.Add("Sample Group table has invalid mix of UOM"); hasErrors = true; } if (HasBlankCountOrMeasure(dal)) { errorList.Add("Tree table has record(s) with blank Count or Measure value"); hasErrors = true; } if (HasBlankDefaultLiveDead(dal)) { errorList.Add("Sample Group table has record(s) with blank default live dead vaule"); hasErrors = true; } if (HasBlankLiveDead(dal)) { errorList.Add("Tree table has record(s) with blank Live Dead value"); hasErrors = true; } if (HasBlankSpeciesCodes(dal)) { dal.Execute( @"Update Tree SET Species = (Select Species FROM TreeDefaultValue WHERE TreeDefaultValue.TreeDefaultValue_CN = Tree.TreeDefaultValue_CN) WHERE ifnull(Tree.Species, '') = '' AND ifnull(Tree.TreeDefaultValue_CN, 0) != 0;"); if (HasBlankSpeciesCodes(dal)) { errorList.Add("Tree table has record(s) with blank species or no tree default"); hasErrors = true; } } if (HasOrphanedStrata(dal)) { errorList.Add("Stratum table has record(s) that have not been assigned to a cutting unit"); hasErrors = true; } if (HasStrataWithNoSampleGroups(dal)) { errorList.Add("Stratum table has record(s) that have not been assigned any sample groups"); hasErrors = true; } errors = errorList.ToArray(); return(hasErrors); }