c# - 从解析字符串值的单行条件语句将 null 传递到 DataTable

标签 c# .net datetime nullable system.data.datatable

我有一个循环遍历固定宽度文本文件的应用程序,将每一行读入一个字符串变量并使用 .Substring() 方法查找给定字段的数据。对于给定的字段,它会检查内容是否只是空格,或者其中是否确实有“数据”,即除了空格之外的任何内容。如果有数据,并且该数据表示一个日期,例如,然后 DateTime.Parse() 对该数据运行并传递给 C# DataTable 中日期时间类型的字段;但是,如果没有数据——只有空格,我想简单地向该字段传递一个空值。下面是一段代码来说明:

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?;                                                         

     }
}

我的问题是,当我尝试运行它时,它会抛出一个错误,提示它需要一个 DBNull(无法将 Column 'Application_Date' 设置为 null。请改用 DBNull。)

但是当我尝试简单地传递一个 DBNull 时,它告诉我它不能在 DateTime 和 DBNull 之间转换(无法确定条件表达式的类型,因为 'System.DateTime? ' 和 'System.DBNull')

我在这里错过了什么?

最佳答案

您需要将 DateTime 转换为 object 以在条件中使用它:

dr["Application_Date"] = (...) ? (object)DateTime.Parse(...) : DBNull.Value;

关于c# - 从解析字符串值的单行条件语句将 null 传递到 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5223646/

相关文章:

c# - 从 C# 读取和写入 Microsoft Project 2007

c# - Caliburn 微 : DialogResult

c# - 设置触发从父模板 (WPF) 传递下来的 'self' 属性

c# - 为什么代码生成名为 <>c__DisplayClass1 的 MSIL 类

mysql - 将缩写字符串格式的日期转换为mysql中的日期格式

c# - 在 C# 中读取 oledbdatareader 中的第 n 行

c# - 查询 Active Directory 的任务并行库(使用 DirectoryServices)

java - 如何在 JodaTime 中获取星期几的名称

mysql - DBeaver:以毫秒显示日期时间

c# - 用双引号将每个单词括起来