2016-07-01 135 views
1

我的存储过程是这样的:C#存储过程没有通过可选参数在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

然后问SqlHelper'的'作者,不管它是什么,允许它在他们使用调用存储过程的任何代码。 –

回答

2

在你的代码可以写为:

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

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

0

请用空的所有参数在存储过程中设置默认值:

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