ObjectParameter未从存储过程获取输出值



在我的应用程序(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。

What I've try/found:

  • InsertedId.Value总是-1
  • 错误信息在'InsertedId ' -> 'MappableType' -> 'DeclaringMethod'
  • DeclaringMethod中的错误显示

    ((System.RuntimeType) InsertedId.MappableType)。DeclaringMethod抛出了一个System类型的异常。InvalidOperationException System. reflection . methodbase{系统。InvalidOperationException}

  • DeclaringMethod.Message

    方法只能在Type。IsGenericParameter为true

  • 在存储过程中尝试OUTOUTPUT

  • 尝试SELECT @InsertedIDRETURN @InsertedID
  • 尝试new ObjectParameter("InsertedID", typeof(Int32))代替-1为第二个参数

我花了好几个小时想弄清楚到底发生了什么,但是我完全卡住了…

我想这是有意义的,它是抱怨,从存储过程返回的结果是一个结果集,但我仍然不知道为什么它过去的工作…无论如何,像下面这样修改代码就可以达到目的了。

改为:

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

:

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

最新更新