[英]ObjectParameter not getting the output value from a stored procedure
在我的應用程序(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
我一直想弄清楚現在發生了多少小時但是我完全陷入困境......
我猜它是有道理的,它抱怨從存儲過程返回的結果是一個結果集,但我仍然不知道為什么它曾經工作...無論如何改變代碼如下訣竅。
改變自:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.