【问题标题】:C# stored procedure without passing optional parameters不传递可选参数的 C# 存储过程
【发布时间】:2016-07-01 05:45:32
【问题描述】:

我在 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# 中调用过程而不传递可选参数。

请帮帮我。

【问题讨论】:

  • 然后询问SqlHelper 的作者,不管那是什么,允许它在他们用来调用存储过程的任何代码中。

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


【解决方案1】:

在你的代码中你可以写成:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2022-10-15
      • 2018-04-04
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      相关资源
      最近更新 更多