2009-07-01 2 views
0

Я понял, что у меня очень большой метод, который создает объекты SqlParameter и добавляет их в SqlCommand (cmd). Например:Каков наилучший код для вызова хранимой процедуры со многими параметрами

SqlParameter itemType = new SqlParameter 
{ 
    ParameterName = "ItemType", 
    Direction = ParameterDirection.Input, 
    SqlDbType = SqlDbType.Int, 
    Value = (int)item.ItemType 
}; 

cmd.Parameters.Add(itemType); 

Хранимая процедура имеет множество параметров по дизайну, и дизайн не может быть изменен.

Мне не нравится иметь несколько pagedowns кода для создания параметров. Трудно читать/поддерживать. Конечно, я могу использовать регионы здесь, но вопрос о коде.

Есть ли у вас идеи, как я могу улучшить свой код?

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

Что вы думаете?

спасибо.

ответ

0

Другой способ сделать это, чтобы сделать SqlCommand членом поля класса, и есть метод члена для его инициализации.

Это похоже на код, создаваемый Visual Studio при создании компонента, а затем перетащить SqlCommand на поверхность дизайна. Если вы сконфигурируете SqlCommand с параметризованным запросом или хранимой процедурой с параметрами, тогда он сгенерирует код для создания объектов SqlParameter и добавит их в свойство Parameters.

Чтобы использовать Thie SqlCommand в коде, вы могли бы сделать:

m_Command.Parameters["@ParamName"].Value = value; 
+0

Я думаю, что это будет работать для меня. Спасибо. – Antipod

0

Может быть, я понял ваш вопрос неправильно, но почему бы не просто абстрагироваться от кода, который инициализирует параметр и добавляет его в объект команды к вспомогательной функции?

Что-то вроде этого ...

AddSqlParam ("ParamName1", SqlDbType.Int, знач1, ParameterDirection.Input, команда); AddSqlParam ("ParamName2", SqlDbType.String, val2, ParameterDirection.Input, команда);

Вы можете дополнительно реорганизовать это, используя обычно используемые параметры в небольшие вспомогательные функции. Например, большинство баз данных имеют столбец идентификатора.

Итак, у вас может быть такой метод, как AddIdParam (команда);

Надеюсь, я передал свою точку зрения.

0

Это немного более сгущенное формат, который вы могли бы использовать

SqlCommand command = new SqlCommand(); 

command.Parameters.Add(new SqlParameter("@param1", SqlDbType.NVarChar, 255)); 
command.Parameters[command.Parameters.Count - 1].Value = "value1"; 

command.Parameters.Add(new SqlParameter("@param2", SqlDbType.NVarChar, 255)); 
command.Parameters[command.Parameters.Count - 1].Value = "value2"; 

command.Parameters.Add(new SqlParameter("@param3", SqlDbType.NVarChar, 255)); 
command.Parameters[command.Parameters.Count - 1].Value = "value3"; 
Смежные вопросы