C#存储过程没有传递可选参数

时间:2016-07-01 05:45:33

标签: c# sql-server stored-procedures optional-parameters

我在SQL Server中的存储过程如下所示:

ALTER PROC [dbo].[Rd_CreateModifyAssignmentType]
(
    @AssignmentTypeId nvarchar(50),
    @AssignmentTypeName nvarchar(50),
    @mode int,
    @Langtype nvarchar(10)='' 
)

从C#调用它时,就像这样:

SqlHelper.ExecuteNonQuery("Rd_CreateModifyAssignmentType", AssignmentTypeId, AssignmentTypeName, mode);

它引发了异常:

  

参数计数与参数值计数不匹配。

我想在C#中调用该过程而不传递可选参数。

请帮助我。

2 个答案:

答案 0 :(得分:2)

在您的代码中,您可以写为:

if (Langtype.HasValue)
   cmd.Parameters.AddWithValue("@Langtype", Langtype.Value);

所以现在会发生的是你的程序将检查可选参数的值。如果它找不到任何值,则该方法不会将@Langtype参数添加到命令中,它将使用您在数据库中指定的默认值''

答案 1 :(得分:0)

请在存储过程中将默认值设置为null所有参数:

ALTER PROC [dbo].[Rd_CreateModifyAssignmentType]
(
   @AssignmentTypeId nvarchar(50) = null,
   @AssignmentTypeName nvarchar(50) = null,
   @mode int = null,
   @Langtype nvarchar(10) = null 
)