Bonjour,
Je rencontre actuellement un problème sur une requête, je souhaite récupérer les vauleurs de mes champs DT_DEB et DT_FIN qui sont des DateTime dans ma base.
Seulement, j'obtiens cette erreur :
Voici mon contrôleur récupérant les champs de ma requêtes avec les clauses where :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Cannot cast DBNull.Value to type 'System.DateTime'. Please use a nullable type.
Ma méthode GetLogs() exécutant la requête initiale sans condition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public ActionResult PageLogs(string CR, string Appli, string TRT) { var items = GetLogs(); string GetCR = CR; string GetAppli = Appli; string GetTRT = TRT; var Query = (from i in items where i.Field<String>("CD_APPLI") == GetAppli && i.Field<String>("CD_CR") == GetCR && i.Field<String>("CD_TRT") == GetTRT select new Suivi { CD_JOB = i.Field<String>("CD_JOB"), CD_TRT = i.Field<String>("CD_TRT"), CD_TYP_TRT = i.Field<String>("CD_TYP_TRT"), CD_TRT_SSIS = i.Field<string>("CD_TRT_SSIS"), DT_DEB = i.Field<DateTime>("DT_DEB"), DT_FIN = (DateTime)i.Field<DateTime?>("DT_FIN"), STATUT = i.Field<string>("STATUT"), PERIODE = i.Field<Int64>("PERIODE"), TIMING = i.Field<string>("TIMING"), CD_APPLI = i.Field<String>("CD_APPLI")}).ToList(); ViewData["CR"] = GetCR; ViewData["Appli"] = GetAppli; ViewData["TRT"] = GetTRT; return View(Query); }
Si je ne récupère pas mes champs DateTime, ma requête me retourne les bons résultats, mais si je veux les récupérer, j'obtiens l'erreur indiquée au début de ce topic.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 private List<DataRow> GetLogs() { List<DataRow> liste = null; string query = "select l.CD_CR, l.CD_JOB, t.CD_TRT, typ.CD_TYP_TRT, j.CD_TRT_SSIS, l.DT_DEB, l.DT_FIN, l.STATUT, l.PERIODE, t.CD_APPLI, case " + "when j.JR_EXEC < DAY(case when l.DT_DEB is null then DAY(l.DT_DEB) else day(l.DT_DEB) end) then 'EN_RETARD' " + "when j.JR_EXEC > DAY(l.DT_DEB) then 'A TEMPS' " + "else 'NON INITIE' end TIMING " + "from dbo.REF_TRT t, dbo.REF_TYP_TRT typ, dbo.REF_JOB j, dbo.LOGS l " + "where t.CD_TRT = j.CD_TRT and j.CD_TYP_TRT = typ.CD_TYP_TRT and l.CD_JOB = j.CD_JOB"; string connString = "Data Source=.;Initial Catalog=SUIVI_DWH;Integrated Security=True"; using (SqlConnection conn = new SqlConnection(connString)) { using (SqlCommand objCommand = new SqlCommand(query, conn)) { objCommand.CommandType = CommandType.Text; DataTable dt = new DataTable(); SqlDataAdapter adp = new SqlDataAdapter(objCommand); conn.Open(); adp.Fill(dt); if (dt != null) { liste = dt.AsEnumerable().ToList(); } } } return liste; } }
J'ai essayé de tester la valeur que me retourne le champ et si c'est "null", je lui retourne une valeur du genre "Pas de date" mais je ne sais pas où faire ce test ni la syntaxe qu'il doit avoir :/
Avez-vous une piste à me donner afin de résoudre ce soucis ?
Merci d'avance pour vos réponses
Partager