Имя параметра 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
).