在我的应用程序(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
在存储过程中尝试
OUT
和OUTPUT
- 尝试
SELECT @InsertedID
和RETURN @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;
}