测试空值和数字的日期值

时间:2013-07-03 17:07:39

标签: c#

我正在逐行读取excel文件并将项目添加到集合中 这将保存到数据库中。

在数据库中:

NumberValue1 to NumberValue3  are numbers and nullable.
Datevalue1 to Datavalue5 are dates and nullable.
BooleanYN1 is a varchar2(1 char) and nullable.

我希望能够测试这些数字,字符串和日期值,以便不在数据库中插入null。

我该如何处理?对于下面的字符串,测试应该没问题。 我特别关注日期变量和数字。

if ((col2Value != null && col3Value != null & col4Value != null))
{
    excelFileDataList.Add(new ExcelData 
    {
        BusinessUnitCode = col2Value.ToString(),
        GenericJobId = Convert.ToInt32(col3Value),

        NumberValue1 = Convert.ToInt32(col8Value) == null ? 0 : Convert.ToInt32(col8Value),
        NumberValue2 = Convert.ToInt32(col8Value) == null ? 0 : Convert.ToInt32(col9Value),
        NumberValue3 = Convert.ToInt32(col8Value) == null ? 0 : Convert.ToInt32(col10Value),

        StringValue1 = col18Value == null ? "" : col18Value.ToString(),
        StringValue2 = col19Value == null ? "" : col19Value.ToString(),
        StringValue3 = col20Value == null ? "" : col20Value.ToString(),

        DateValue1 = Convert.ToDateTime(col28Value) == null ?  : Convert.ToDateTime(col28Value),
        DateValue2 = Convert.ToDateTime(col29Value) == null ?  : Convert.ToDateTime(col29Value),
        DateValue3 = Convert.ToDateTime(col30Value) == null ?  : Convert.ToDateTime(col30Value),
        DateValue4 = Convert.ToDateTime(col31Value) == null ?  : Convert.ToDateTime(col31Value),
        DateValue5 = Convert.ToDateTime(col32Value) == null ?  : Convert.ToDateTime(col32Value),

        BooleanYN1 = col34Value == null ? "" : col34Value.ToString(),
        BooleanYN2 = col35Value == null ? "" : col35Value.ToString(),
        BooleanYN3 = col36Value == null ? "" : col36Value.ToString(),                                            
    });

我一直没有将对象引用设置为对象的实例。我认为这是空值的结果。 excel电子表格中有适用于各种列的空值

2 个答案:

答案 0 :(得分:2)

对于你的数字和日期,我建议你使用.TryParse()。

var myDate;

if(DateTime.TryParse(value, out myDate))
{
   // use the value of myDate
}

答案 1 :(得分:1)

您希望在之前测试null ,在对象上调用Convert.ToInt32Convert.ToDateTime(因为传入空值会引发异常)。而不是:

NumberValue1 = Convert.ToInt32(col8Value) == null ? 0 : Convert.ToInt32(col8Value)

你想要:

NumberValue1 = col8Value == null ? 0 : Convert.ToInt32(col8Value)

而不是:

DateValue1 = Convert.ToDateTime(col28Value) == null ?  : Convert.ToDateTime(col28Value)

你想要:

DateValue1 = col28Value == null ? DateTime.MinValue : Convert.ToDateTime(col28Value)

或者,如果该类支持Nullable<T>值:

DateValue1 = col28Value == null ? null : (DateTime?)Convert.ToDateTime(col28Value)