【问题标题】:Call Stored Procedure with a null parameter value with EntityFramework使用 EntityFramework 调用具有空参数值的存储过程
【发布时间】:2015-06-05 02:02:22
【问题描述】:

我在 sqlserver 2008 上有一个存储过程,其中一个参数接受空值。我不知道如何用参数上的空值调用那个 SP。对于更多的上下文,我正在使用 EntityFramework 6xx

在下一个示例中,参数“@status, @Compatible”可以将 null 作为值,但我只是得到一个异常,说没有提供这些 prarams。

public override IList<MyOutputType> SearchStuff(string Term, int? status, bool? Compatible, long TMPLDMID, int RangeFrom, int RangeTo)
{
    List<SqlParameter> par = new List<SqlParameter>();
    par.Add(new SqlParameter("@Term", System.Data.SqlDbType.VarChar, 50) { Value = "%" + Term + "%" });
    par.Add(new SqlParameter("@status", System.Data.SqlDbType.Int) { Value = status, IsNullable = true });
    par.Add(new SqlParameter("@Compatible", Compatible) { IsNullable = true });
    par.Add(new SqlParameter("@TMPLDMID", TMPLDMID));
    par.Add(new SqlParameter("@RangeFrom", RangeFrom));
    par.Add(new SqlParameter("@RangeTo", RangeTo));

    return db.Database.SqlQuery<MyOutputType>(
        "EXEC [spSearchForStuff] @Term, @status, @Compatible, @TMPLDMID, @RangeFrom, @RangeTo", par.ToArray()
    ).ToList();

【问题讨论】:

  • 你会认为下面的答案是公认的答案吗?

标签: entity-framework stored-procedures parameters null


【解决方案1】:

我遇到了同样的问题。如果值为空,它将加载默认值。我实际上需要一个空值,所以对于状态你应该可以在下面做。

par.Add(new SqlParameter("@status", (object)status??DBNull.Value);

查看此答案以获取更深入的示例https://stackoverflow.com/a/4556007/1248536

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多