Обработка нулевого результата с объектом класса


Функция мой БЛЛ, как:

 public Categorymaster GetByPrimaryKey(CategorymasterKeys keys)
        {
            return _dataObject.SelectByPrimaryKey(keys); 
        }

// выше функции-это вызов функции написано ниже

 public Categorymaster SelectByPrimaryKey(CategorymasterKeys keys)
        {
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "dbo.[categorymaster_SelectByPrimaryKey]";
            sqlCommand.CommandType = CommandType.StoredProcedure;

            // Use connection object of base class
            sqlCommand.Connection = MainConnection;

            try
            {

                sqlCommand.Parameters.Add(new SqlParameter("@category_id", SqlDbType.Int, 4, ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, keys.Category_id));

                if (MainConnection.State == ConnectionState.Closed)
                {
                    MainConnection.Open();
                }

                IDataReader dataReader = sqlCommand.ExecuteReader();

                if (dataReader.Read())
                {
                    Categorymaster businessObject = new Categorymaster();

                    PopulateBusinessObjectFromReader(businessObject, dataReader);

                    return businessObject;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Categorymaster::SelectByPrimaryKey::Error occured.", ex);
            }
            finally
            {
                MainConnection.Close();
                sqlCommand.Dispose();
            }

        }

В моей веб-странице Я написал ниже код:

BusinessLayer.Product_category_transFactory pctf = новый Product_category_transFactory();

        Categorymaster cm = cmf.GetByPrimaryKey(new CategorymasterKeys(catid));//throws exception when it returns null

Теперь проблема я столкнулся заключается в том, что при отсутствии результата на запрос, то он возвращает значение null и бросить исключение.

Та же модель используется в все приложение. Пожалуйста, скажите мне, что все минимальные и оптимальные изменения я должен сделать работать с нулевым (когда нет результата).

Примечание: Я использую .чистый фреймворк 4.0

Спасибо



883
3
задан 8 июля 2011 в 06:07 Источник Поделиться
Комментарии
2 ответа

Какое исключение вы получаете? Что значит возвращает NULL и бросает исключение?

Ставим этот код в класс и выполнив тест, я вернусь объект или null, если запись существует или не соответственно.

Если вы получаете исключение из вышеуказанного разговора с СМФ.GetByPrimaryKey, это исключение при вызове конструктора CategorymasterKeys?

Вот тест, который я использовал:

[TestMethod()]
public void TestWhenPassingAnIdNotInTheResultSetToSelectByPrimaryKey_ThenNullIsTheResult()
{
var target = new Class2();
CategorymasterKeys keys = new CategorymasterKeys { Category_id = 0 };
Categorymaster actual = target.SelectByPrimaryKey(keys);
Assert.IsNull(actual);
}

4
ответ дан 12 августа 2011 в 12:08 Источник Поделиться

Вы могли бы использовать тип, допускающий значение null для этого. Затем можно пометить если это действительно null или просто пустой результирующий набор. MSDN на нулевых типов

1
ответ дан 16 августа 2011 в 09:08 Источник Поделиться