Лучший способ проверить параметр IDbcommand - PullRequest
0 голосов
/ 04 января 2011

Допустим, у меня есть класс

public class foo { public string FooId { get; set; } }

Теперь в моем слое данных я пытаюсь написать код, который создаст один экземпляр IDataCommand и установит FooId в качестве одного из параметров команды, например,

public void save(foo f, IDbConnection conn)
{ 
    IDataCommand cmd = conn.CreateCommand(); 
    cmd.CommandName = "SP_SAVE_INFO" ; 
    IDataDbParameter param = cmd.CreateParameter(); 
    param.name = "@fooId"; 
    param.value=(f.id>0)?f.id:(object)DbNull.Value;
    cmd.parameters.add(param);
    cmd.ExecuteNonQuery();
}

Если вы заметили строку кода - param.value = (f.FooId> 0)? F.id: (object) DbNull.Value; , Мой вопрос именно в этой области. Если у меня слишком много параметров для предоставления. Это выглядит довольно плохо, когда я проверяю значение для каждого параметра. Вопрос в том, что является лучшим способом сделать это? Кто должен делать это DL или BL? Если BL, то он должен назначить значение DBNull там? Есть ли другой стандартный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 04 января 2011

Почему бы не попробовать универсальный метод расширения?

public static class IDataDbParameterExtensions
{
    public static void SetValue<T>(this IDataDbParameter parameter, T value)
    {
        if(value == default(T)) // for structs (ValueTypes) like Int, default(T) will be 0 and for classes (RefTypes), it will be null.
        {
            parameter.Value = DBNull.Value;
        }
        else
        {
            parameter.Value = value;
        }
    }
}

Используйте его следующим образом:

param.SetValue(f.id);
0 голосов
/ 04 января 2011

Самое полное решение - не делать это самостоятельно. Есть много фреймворков, которые помогут вам здесь - взгляните, например, на NHibernate или Entity Framework.

Если вам действительно нужно сделать это вручную, вы можете преобразовать чеки в методы многократного использования. Примерно так:

  public void AddIntParameterWithNullForZero(IDataCommand command, string parameterName, int parameterValue) 
  {
    // Add the parameter and perform the checks here.
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...