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

问题描述 投票:0回答:1

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

  • 在存储过程中尝试了

    OUT
    OUTPUT

  • 尝试过
    SELECT @InsertedID
    RETURN @InsertedID
  • 尝试使用
    new ObjectParameter("InsertedID", typeof(Int32))
    而不是
    -1
    作为第二个参数

我已经花了好几个小时试图弄清楚发生了什么,但我完全陷入困境......

c# asp.net sql-server visual-studio-2015 webforms
1个回答
0
投票

我想它抱怨从存储过程返回的结果是一个结果集是有道理的,但我仍然不知道为什么它过去可以工作......无论如何改变代码如下就可以了。

更改自:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.