8

我有以下存储过程

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

是否必须以不同方式传递覆盖默认值的参数?

4

3 回答 3

4

采用

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

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

于 2013-09-26T23:32:03.833 回答
2

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

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

这就是为什么AddWithValue要介绍的。

于 2013-09-26T23:26:21.360 回答
0

更好更安全:

cmd.Parameters.Add("@bar", SqlDbType.NVarChar, 16, "bar");
于 2014-02-19T13:13:14.677 回答