在我的应用程序(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 DeclaringMethod
中的错误说
((System.RuntimeType)InsertedId.MappableType).DeclaringMethod引发类型System.InvalidOperationException的异常System.Reflection.MethodBase {System.InvalidOperationException}
DeclaringMethod.Message
说
只能在Type.IsGenericParameter为true的Type上调用方法。
在存储过程中尝试了OUT
和OUTPUT
SELECT @InsertedID
和RETURN @InsertedID
new ObjectParameter("InsertedID", typeof(Int32))
而不是-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