Вернуть обнуляемую дату и время из скалярной хранимой процедуры - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть функция, которая возвращает дату из хранимой процедуры, и все это прекрасно работает, пока значение равно 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 ]

5 голосов
/ 06 апреля 2010

после этой строки:

var x = c.ExecuteScalar();

Вы можете сделать это:

return x as DateTime?

Если x является значением DateTime, то оно будет возвращать эту дату и время (в противном случае (null, DbNull.Value) оно вернет нулевое значение.

0 голосов
/ 06 апреля 2010

Вы также можете проверить это x != DbNull.Value, я думаю.

0 голосов
/ 06 апреля 2010

Ну, вам просто нужно обратить внимание на этот фрагмент кода:

DateTime? LimitDate= null;

.....

var x = c.ExecuteScalar();

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

return LimitDate.Value;

Вы инициализируете LimitDate в NULL, и если значение "x", возвращаемое из ExecuteScalar, равно NULL, вы ничего не делаете - и, следовательно, не должны вызывать

return LimitDate.Value

на это, в конце концов LimitDate IS NULL в этом случае! Или вам нужно инициализировать переменную LimitDate ненулевым значением .....

Вам нужно что-то вроде этого:

if(LimitDate != null)
    return LimitDate.Value;
else
    return null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...