ObjectParameter没有从存储过程

时间:2016-11-03 21:20:11

标签: c# asp.net sql-server visual-studio-2015 webforms

在我的应用程序(VS2015,C#,WebForm)中,我有以下代码以前完全正常工作(本地和生产服务器上),但现在我收到错误:

插入项目的存储过程:

CREATE PROCEDURE [dbo].[StoredProcedure_Item_Insert]
    @ItemText VARCHAR(250),
    @InsertedID INT OUTPUT

    INSERT INTO [dbo].[Item] ([ItemText])
    VALUES (@ItemText  -- ItemText - varchar(250)
           );

    SET @InsertedID = SCOPE_IDENTITY();

    SELECT @InsertedID AS InsertedID;

存储库代码:

public int InsertItem(string itemText)
{
        ObjectParameter InsertedId = new ObjectParameter("InsertedID", -1);

        _db.StoredProcedure_Item_insert(feeText, InsertedId);

        return (int)InsertedId.Value;
}

.edmx文件

中此存储过程的函数导入
Returns a Collection Of Scalars: Int32

当我点击Get Column Information button时,我得到了

Name: InsertedID
EDM Type: Int32
Db Type: int
Nullable: true

我能想到的唯一变化是我的机器升级到Windows 10所以我不得不重新安装VS2015。

我尝试/发现的内容:

  • InsertedId.Value始终为-1
  • 错误消息位于'InsertedId` - > 'MappableType' - > 'DeclaringMethod'
  • DeclaringMethod中的错误说

      

    ((System.RuntimeType)InsertedId.MappableType).DeclaringMethod引发类型System.InvalidOperationException的异常System.Reflection.MethodBase {System.InvalidOperationException}

  • DeclaringMethod.Message

      

    只能在Type.IsGenericParameter为true的Type上调用方法。

  • 在存储过程中尝试了OUTOUTPUT

  • 尝试SELECT @InsertedIDRETURN @InsertedID
  • 为第二个参数
  • 尝试了new ObjectParameter("InsertedID", typeof(Int32))而不是-1

我一直试图弄清楚现在发生了多少小时但我完全陷入困境......

1 个答案:

答案 0 :(得分:0)

我认为有理由抱怨从存储过程返回的结果是结果集,但我仍然不知道为什么它曾经工作...无论如何改变代码如下所示特技。

更改自:

public int InsertItem(string itemText)
    {
        ObjectParameter InsertedId = new ObjectParameter("InsertedID", -1);
        var result = _db.usp_Fee_insert(itemText, InsertedId);
        return (int)InsertedId.Value;
    }

对此:

localhost:8000