【问题标题】:Stored procedure always returns -1 (asp.net MVC, Entity, SQL)存储过程总是返回 -1(asp.net MVC、Entity、SQL)
【发布时间】:2017-07-13 16:42:27
【问题描述】:

我正在尝试从数据库第一个 MVC 实体框架项目调用 SQL Server 中的存储过程,但返回值始终返回 -1。

我尝试了许多不同的方法来解决这个问题,但到目前为止都没有成功。我在下面列出了我认为是我的相关代码的内容。让我知道是否需要更多代码。感谢任何可以提供帮助的人!

这只是我的测试代码,看看它是否正常工作。

public ActionResult Index()
{
    Cust_Entities cse = new Cust_Entities();

    if (cse.DoesCustomerNumberExist("1") == 1)
    {
        return RedirectToAction("Index", "Home");
    }
    else
    {
        return RedirectToAction("About", "Home");
    }          
}

public virtual int DoesCustomerNumberExist(string customer_Number)
{
    var customer_NumberParameter = customer_Number != null ?
        new ObjectParameter("Customer_Number", customer_Number) :
        new ObjectParameter("Customer_Number", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("DoesCustomerNumberExist", customer_NumberParameter);
}

SQL Server 存储过程代码:

ALTER PROCEDURE [dbo].[DoesCustomerNumberExist]
      @Customer_Number VARCHAR(20)
AS
BEGIN
      SET NOCOUNT ON;

      DECLARE @Exists INT

      IF EXISTS(SELECT Customer_Number
                        FROM business_Final.dbo.AR_Customer
                        WHERE Customer_Number = @Customer_Number)
      BEGIN
            SET @Exists = '1'
      END
      ELSE
      BEGIN
            SET @Exists = '0'
      END

      RETURN @Exists
END

【问题讨论】:

  • 旁注:由于@Exists 被声明为INT,您应该使用单引号(因为您处理的是数字 值 - 不是字符串)设置值时 - 使用 SET @Exists = 1 - 没有单引号,没有从字符串到 int 的不必要转换等

标签: sql asp.net-mvc entity-framework


【解决方案1】:

您正在使用ExecuteFunction 的无类型版本。根据文档:

执行数据中定义的存储过程或函数 来源并在概念模型中表达;丢弃任何结果 从函数返回;并返回受影响的行数 执行。

如果未进行任何修改,则通常为 -1。

这里是ExecuteFunction的不同形式的文档:https://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.executefunction(v=vs.110).aspx

【讨论】:

    【解决方案2】:

    非泛型ExecuteFunction 的返回值是受影响的行数,而不是存储过程的返回值。换句话说,它只适用于更新、删除等,而不是选择。

    要返回数据,您必须使用通用版本,即ExecuteFunction<TElement>,其中TElement 是您的返回类型。这是因为该方法需要知道如何绑定从 SQL Server 返回的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多