ojh*_*ins 8 c# sql t-sql sql-server stored-procedures
我有以下存储过程
CREATE PROCEDURE [dbo].[usp_GetData]
@foo VARCHAR (20), @bar bit = 1
AS ...
Run Code Online (Sandbox Code Playgroud)
这在SSMS中调用时提供了正确的结果.
EXEC dbo.usp_GetData @foo = 'Hellow World', @bar = 0
Run Code Online (Sandbox Code Playgroud)
虽然在C#应用程序中调用如下所示
cmd.Parameters.Add(new SqlParameter("@foo", foo));
cmd.Parameters.Add(new SqlParameter("@bar", 0));
Run Code Online (Sandbox Code Playgroud)
&由剖析器捕获,如下所示.
exec dbo.usp_GetData @foo=N'Hello World',@bar=default
Run Code Online (Sandbox Code Playgroud)
是否必须以不同方式传递超出默认值的参数?
new SqlParameter("@bar", 0)触发错误的过载 - string parameterName, SqlDbType dbType。该值最终未被设置。
您想要设置该值的那个,所以它应该是new SqlParameter("@bar", (object)0).
这就是AddWithValue引入的原因。