Passage de la valeur null dans une Table de données à partir d'une seule ligne d'instruction conditionnelle d'analyse de chaîne de valeurs
J'ai une application qui effectue une boucle dans un fichier texte à largeur fixe, lit chaque ligne dans une variable de chaîne et utilise le .Méthode Substring() pour trouver les données relatives à un domaine donné. Pour un domaine donné, il vérifie pour voir si le contenu est tout simplement espaces, ou si il est en fait "données", c'est à dire quelque chose, mais des espaces. S'il existe des données, et que les données représentent une date, par exemple, alors DateTime.Parse() est exécuté sur les données recueillies et transmises à un champ de type datetime dans un C# DataTable; cependant, si il n'y a pas de données--juste des espaces, je veux simplement passer une valeur null dans le champ. Voici un extrait de code pour illustrer:
var dataTable = new DataTable();
dataTable.Columns.Add("Application_Date").DataType = Type.GetType("System.DateTime");
while (!sr.EndOfStream)
{
string row = sr.ReadLine();
if (row.Substring(0, 1) == "2" && row.Substring(42, 1) == "T")
{
DataRow dr = dataTable.NewRow();
dr["Application_Date"] = row.Substring(124, 8) != " " ?
DateTime.Parse(row.Substring(124, 4) +
"-" + row.Substring(128, 2) + "-" +
row.Substring(130, 2)) :
null as DateTime?;
}
}
Mon problème est que lorsque je tente de l'exécuter, il renvoyait un message d'erreur disant qu'il veut un DBNull (Cannot set Column 'Application_Date' to be null. Please use DBNull instead.
)
Mais lorsque je tente de passer simplement d'un DBNull au lieu de cela, il me dit qu'il ne peut pas convertir entre DateTime et DBNull (Type of conditional expression cannot be determined because there is no implicit conversion between 'System.DateTime?' and 'System.DBNull'
)
Ce qui me manque ici?
OriginalL'auteur Tom Miller | 2011-03-07
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de jeter le
DateTime
àobject
de l'utiliser dans le conditionnel:J'ai peut-être raté quelque chose ici, mais j'ai eu le même problème et ne pouvait se résoudre à la mettre "(objet)" en face de la "DBNull.Valeur" la partie de la déclaration (et non pas en face de type DateTime.Analyser le cadre de l'état—comme le suggère la réponse ci-dessus).
FYI - En VB.NET vous devez utiliser
DataTable1.Rows(i)(j) = If(xarray(i, j), CObj(DBNull.Value))
est correcte.
OriginalL'auteur SLaks
À l'aide de l'null-coalescence de l'opérateur:
OriginalL'auteur Saeb Amini