2016-11-03 74 views
0

在我的应用程序(VS2015,C#,WebForm)中,我有以下代码,以前(在本地和生产服务器上)完全正常工作,但现在我得到错误:ObjectParameter没有从存储过程中获得输出值

存储过程中插入一个项目:

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; 
} 

进口功能文件

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系统的异常。 Reflection.MethodBase {} System.InvalidOperationException

  • DeclaringMethod.Message

    方法只能在键入该Type.IsGenericParameter是真的被调用。

  • 在存储过程中试图OUTOUTPUT

  • 尝试SELECT @InsertedIDRETURN @InsertedID
  • 尝试new ObjectParameter("InsertedID", typeof(Int32)),而不是-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; 
    } 
相关问题