我在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#中调用该过程而不传递可选参数。
请帮助我。
答案 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
)