Имя параметра dbCommand и хранимой процедуры отличается, но значение передается. Зачем?

Я использую C#, и я создаю DbCommand чтобы выполнить хранимую процедуру Oracle.

Мой вопрос: почему процедура получает значение через другой именованный параметр, чем в on в БД?

Когда я добавляю параметр в dbCommand:

...
string value = "Whatever"

db.AddInParameter(dbCommand,"WrongParamName",DbType.String);
db.SetParameterValue(dbCommand, "WrongParamName", value); 

и я выполняю:

dataSet = db.ExecuteDataSet(dbCommand);

Это пройдет dbCommand параметр для параметра хранимой процедуры правильно.

  • Это почему?

  • Он устанавливает значение для первого параметра без значения или основано на позиции?

  • Если это основано на позиции, зачем нам имя?

  • Имя только для того, чтобы помочь разработчику понять код?

2 ответа

Решение

Мне нужно знать, выполняете ли вы хранимую процедуру, такую ​​как "EXEC sp_StoredProcedure @Param1 = @Param1, @Param2 = @Param2" или "EXEC sp_StoredProcedure @Param1, @Param2". В первом случае, если вы измените порядок параметров в sp, вызов не будет затронут. Во втором случае, с другой стороны, это так, поскольку первый параметр команды выполняет первый параметр из sp, второй - второй и так далее. Если вы не можете получить список имен параметров, вы можете по крайней мере попросить другого разработчика не изменять порядок и добавлять параметры только в конец списка параметров в хранимой процедуре. Если вы тоже не можете этого сделать, вам больше нечего делать, чтобы молиться, чтобы не изменить их. С помощью некоторых сценариев вы можете определить список параметров (см. Этот раздел Как получить подробные сведения о параметрах хранимой процедуры?). Вы можете выполнить эту команду как обычный оператор выбора.

После дальнейшего исследования кажется, что dbCommand передает параметры по порядку, а не по имени, потому что это как dbCommand должен вести себя

Я не нашел назначение имени, кроме того, что оно только помогает разработчику узнать, какой параметр какой.

Я также не нашел никакой собственности в dbCommand установить BindByName (недвижимость в OracleCommand).

Другие вопросы по тегам