[英]How to execute stored procedure and get output from the stored procedure using Entity Framework
我一直在嘗試通過調用存儲過程並使用EF6插入一條記錄,並嘗試從該存儲過程中獲取輸出,該存儲過程是新創建的ID,但仍會碰壁。
我有一個存儲過程,其ContactID的輸出
CREATE PROCEDURE [dbo].[usp_InsertContact]
@ContactID int output,
@Name nvarchar(50)
AS
insert into [Contact]
(Name) values (@Name)
set @ContactID = @@IDENTITY
我正在調用存儲過程並傳遞這樣的值...
return Convert.ToInt32(AWJE.Database.SqlQuery<int>
("usp_InsertContact @Name", contact.Name));
那還是行不通的,我遇到了以下錯誤...(而且我早些發布了該錯誤並親自回答了它,但行不通)。
System.Data.Entity.Infrastructure.DbRawSqlQuery`1 [System.Int32]'鍵入“ System.IConvertible錯誤”
然后我去嘗試了...
return AWJE.Database.ExecuteSqlCommand
("exec usp_InsertContact @Name", contact.Name);
調用此方法時,出現以下錯誤...
附加信息:必須聲明標量變量“ @Name”。
如您所見,變量@Name位於存儲過程中,並且我正在傳遞變量@Name。
所以我嘗試了這個
return AWJE.Database.ExecuteSqlCommand
("exec usp_InsertContact @ContactID OUTPUT, @Name", contact.Name);
這給出了這個錯誤...
附加信息:必須聲明標量變量“ @ContactID”。
因此,我對如何執行此操作有些迷失,我知道如何嚴格使用ADO.NET進行此操作。 我到處尋找答案,但不理解我看到的示例,因為我看到的示例與SqlParameter.Add等混合在一起...
而不是給您逐步介紹的詳細說明。 Ť
基本上,有兩種直接在EF上執行此操作的方法,另一種僅使用純SQL。
在EF中,您必須將sproc作為函數添加,此處是有關如何執行此操作的文章https://msdn.microsoft.com/zh-cn/data/gg699321.aspx
或像這樣的純sql方式,
SqlParameter p1= new SqlParameter("@p1", "Test");
SqlParameter p2 = new SqlParameter("@p2", "Test2");
//Executing the stored procedure from your database context
context.Database.ExecuteSqlCommand("sp_StoredProc @p1, @p2", p1, p2);
試試吧
using (ConEntities context = new ConEntities())
{
// ContactID is an output parameter.
ObjectParameter ContactID = new ObjectParameter("ContactID", typeof(int));
SqlParameter Name = new SqlParameter("@Name", "hello sir");
context.usp_InsertContact(ContactID, Name);
//Console.WriteLine(ContactID.Value);
}
我們也可以這樣
var parameters = new[] {
new SqlParameter("@0", SqlDbType.Int32) { Direction = ParameterDirection.Output },
new SqlParameter("@1", "MY Name")
};
context.ExecuteStoreCommand("exec usp_InsertContact @ContactID =@0 output, @Name =@1", parameters);
int d = (int)parameters[0].Value;
我這樣做
var outputId = new SqlParameter { ParameterName = "outputId", Value = 0, Direction = System.Data.ParameterDirection.Output };
Database.ExecuteSqlCommand(
@"spProcedureName @p1, @outputId out",
new SqlParameter("p1", HttpContext.Current.User.Identity.Name),
outputId
);
return Convert.ToInt32(outputId.Value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.