在存储过程调用中使用默认参数

时间:2013-09-26 23:21:39

标签: c# sql sql-server tsql stored-procedures

我有以下存储过程

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 个答案:

答案 0 :(得分:4)

使用

cmd.Parameters.AddWithValue("@bar", 0)

这样你就知道你实际传递了这个值。

答案 1 :(得分:2)

new SqlParameter("@bar", 0)会触发错误的重载 - string parameterName, SqlDbType dbType。该值最终未设置。

你想要设置值的那个,所以它应该是new SqlParameter("@bar", (object)0)

这就是AddWithValue被引入的原因。

答案 2 :(得分:0)

更好,更安全:

cmd.Parameters.Add("@bar", SqlDbType.NVarChar, 16, "bar");