我有一个从存储过程返回日期的函数,它一切正常,直到值为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;
};
}
答案 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
。