Comment puis-je obtenir la valeur DateTime
en C # à partir de la ligne, le code actuel me donne une erreur, toute aide est appréciée, les données proviennent de la base de données de progression:
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString();
statCode = r["STAT"].ToString();
DateTime firstIssueDate = (DateTime)(r["FISS"]);
DateTime endIssueDate = (DateTime)(r["EISS"]);
if(endIssueDate > DateTime.Now)
{ /*do some thing...*/}
else {/*user invalid...*/}
}
il y a deux façons d'utiliser la conversion de date et les pars, merci à tous pour l'aide
Extrait de code de travail final:
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString(),statCode = r["STAT"].ToString();
// r.<DateTime?>("FISS");
if (r["FISS"] != DBNull.Value)
{
DateTime firstIssueDate = Convert.ToDateTime(r["FISS"]);
if (r["EISS"] != DBNull.Value)
{
DateTime endIssueDate = DateTime.Parse(r["EISS"].ToString());
if (endIssueDate > DateTime.Now)
{
C'est juste une supposition mais si le type correspondant dans la base de données est DateTime, pourriez-vous vérifier si la colonne est nullable?
Si c'est le cas, vous voudrez peut-être faire une vérification r["column"] == DBNull.Value
puis le transmettre à un DateTime nullable? Champ.
Ou encore plus simple:
row.Field<DateTime?>("column")
Si ce n'est pas le cas, oui, Convert.ToDateTime () ou autre chose devrait le faire.
MODIFIER:
J'y vois votre code final, mais y a-t-il une chance que vous souhaitiez le faire:
DateTime? firstIssueDate = r.Field<DateTime?>("fiss");
DateTime? endIssueDate = r.Field<DateTime?>("eiss");
if (firstIssueDate.HasValue && endIssueDate.HasValue)
{
firstIssueDate.Value // blah blah
endIssueDate.Value // blah blah
}
Je recommanderais d'utiliser DateTime.Parse () si la ligne renvoie une chaîne pour cet index.
string prodCode = r["PRD-CDE"].ToString(),statCode = r["STAT"].ToString();
DateTime firstIssueDate = DateTime.Parse(r["FISS"].ToString());
DateTime endIssueDate = DateTime.Parse(r["EISS"].ToString());
Vous pouvez également utiliser TryParse
selon vos besoins.
Si vous souhaitez utiliser une valeur par défaut (telle que DateTime.MinValue), plutôt que null (DateTime?) Ou DBNull, vous pouvez le faire:
var firstIssueDate = r["FISS"] as DateTime? ?? DateTime.MinValue;
var endIssueDate = r["EISS"] as DateTime? ?? DateTime.MinValue;
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString();
string statCode = r["STAT"].ToString();
DateTime firstIssueDate = DateTime.Parse((r["FISS"]).ToString());
DateTime endIssueDate = DateTime.Parse((r["EISS"]).ToString());
if(endIssueDate > DateTime.Now)
{ /*do some thing...*/}
else {/*user invalid...*/}
}
Cela devrait compiler et peut fonctionner pour vous. Bien qu'il n'effectue certainement aucune vérification d'erreur que vous devriez faire pour le code de production. Examinez également DateTime.TryParse et vous pouvez envisager d'ajouter un IFormatProvider pour vous assurer que le format est analysé comme prévu.
Tout d'abord, faites r ["FISS"]. GetType () et imprimez-le sur la console (ou faites une pause et regardez-le dans le débogueur). S'il indique qu'il s'agit d'une chaîne, la plupart des conseils ci-dessus vous aideront. S'il indique autre chose, veuillez revenir et mettre à jour votre question.
En guise de réponse secondaire, vous pouvez également utiliser la fonction statique Convert.ToDateTime
DateTime.Parse (r ["FISS"]. ToString ()) est le chemin à parcourir, mais il renvoie une erreur "String n'a pas été reconnu comme une DateTime valide". Pourriez-vous montrer la chaîne réelle dans la colonne r ["FISS"], cela pourrait être un problème d'internationalisation ....
Si vous avez une chaîne DateTime avec un format spécial (pas n'importe quel format .NET DateTime standard) qui doit être converti en type .NET DateTime, vous pouvez utiliser la méthode DateTime.ParseExact()
.
Veuillez consulter le document MSDN pour plus de détails, y compris des exemples.
Si vous avez plusieurs formats à analyser, essayez Méthode DateTime.ParseExact (String, String [], IFormatProvider, DateTimeStyles)