从标量存储过程返回可为空的日期时间

时间:2010-04-06 06:54:31

标签: c# entity-framework

我有一个从存储过程返回日期的函数,它一切正常,直到值为NULL,我该如何解决这个问题呢?所以它也适用于null吗?

    public DateTime? GetSomteDate(int SomeID)
    {

        DateTime? LimitDate= null;

        if (_entities.Connection.State == System.Data.ConnectionState.Closed)
            _entities.Connection.Open();

        using (EntityCommand c = new EntityCommand("MyEntities.GetSomeDate", (EntityConnection)this._entities.Connection))
        {
            c.CommandType = System.Data.CommandType.StoredProcedure;


            EntityParameter paramSomeID = new EntityParameter("SomeID", System.Data.DbType.Int32);
            paramSomeID.Direction = System.Data.ParameterDirection.Input;
            paramSomeID.Value = SomeID;
            c.Parameters.Add(paramSomeID);

            var x = c.ExecuteScalar();

            if (x != null)
                LimitDate = (DateTime)x;

            return LimitDate.Value;

        };
    }

3 个答案:

答案 0 :(得分:5)

这一行之后:

var x = c.ExecuteScalar();

你可以这样做:

return x as DateTime?

如果x是DateTime值,那么它将返回该datetime,否则(null,DbNull.Value)它将返回null。

答案 1 :(得分:0)

好吧,你只需要注意这段代码:

DateTime? LimitDate= null;

.....

var x = c.ExecuteScalar();

if (x != null)
    LimitDate = (DateTime)x;

return LimitDate.Value;

LimitDate初始化为NULL,如果从ExecuteScalar返回的值“x”为NULL,则不执行任何操作 - 因此,您不应该调用

return LimitDate.Value

就此而言,在这种情况下LimitDate IS NULL之后!或者您需要将LimitDate变量初始化为非NULL值.....

你需要这样的东西:

if(LimitDate != null)
    return LimitDate.Value;
else
    return null;

答案 2 :(得分:0)

我认为您也可以查看x != DbNull.Value