Использование параметра Default в вызове хранимой процедуры
у меня есть следующая хранимая процедура
CREATE PROCEDURE [dbo].[usp_GetData]
@foo VARCHAR (20), @bar bit = 1
AS ...
Это обеспечивает правильный результат при вызове в SSMS.
EXEC dbo.usp_GetData @foo = 'Hellow World', @bar = 0
хотя при вызове в приложении C#, как показано ниже
cmd.Parameters.Add(new SqlParameter("@foo", foo));
cmd.Parameters.Add(new SqlParameter("@bar", 0));
& захватывается профилировщиком, как показано ниже.
exec dbo.usp_GetData @foo=N'Hello World',@bar=default
должен ли параметр, который переопределяет значение по умолчанию, передаваться по-другому?
3 ответов
new SqlParameter("@bar", 0)
вызывает неправильную перегрузку -string parameterName, SqlDbType dbType
. Значение в конечном итоге не устанавливается.
вы хотите тот, который устанавливает значение, так что это должно быть new SqlParameter("@bar", (object)0)
.
вот почему AddWithValue
.
использовать
cmd.Parameters.AddWithValue("@bar", 0)
таким образом, вы знаете, что фактически передаете значение.