Sam*_*Sam 13 stored-procedures petapoco
我有一个存储过程返回一个表值.
这是我的存储过程:
PROCEDURE [GetPermitPendingApproval]
@permitYear int = NULL,
AS
BEGIN
SELECT [p].[ID]
,[p].[PermitNumber]
,[p].[PermitTypeID]
,[p].[ApplicationDate]
,[u].[FirstName]
,[u].[MI]
,[u].[LastName]
,[u].[Suffix]
,[u].[ProfessionalTitle]
,[u].[WorksFor]
FROM [SciCollUser] u
INNER JOIN UserPermit up ON up.[UserID] = u.[ID]
INNER JOIN Permit p ON p.[ID] = [up].[PermitID]
WHERE (@permitYear IS NULL OR p.PermitYear = @permitYear)
ORDER BY [p].[ApplicationDate] ASC;
END
Run Code Online (Sandbox Code Playgroud)
我不确定我们是否有这样的方法来使用PetaPoco执行存储过程并将返回的数据作为表格获取?请帮忙!
通常我可以用跟随脚本执行存储过程,但这不是我想要的方式.
db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");
Run Code Online (Sandbox Code Playgroud)
ans*_*ssi 27
你需要在EXEC之前加一个分号.
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);
Run Code Online (Sandbox Code Playgroud)
小智 15
答案可能已经很晚了,但我希望,它对后代有用.您应该在PetaPoco数据库对象上将EnableAutoSelect选项设置为false, db.EnableAutoSelect = false;
否则它将继续向SELECT NULL FROM [Object]您添加sql语句.
这很好,可以调试PetaPoco来源.我发现这个选项只是因为调试!
你得到的List<T>地方T是POCO类型,你想要映射的属性或aDynamic
所以实际的语法是:
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @0", 2013);
Run Code Online (Sandbox Code Playgroud)
要么
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @permitYear",
new {permitYear = 2013});
Run Code Online (Sandbox Code Playgroud)
从 v6.0.344-beta 开始,PetaPoco 现在支持本地存储过程,因此您可以执行以下操作:
var result = db.FetchProc<MyClass>("GetPermitPendingApproval", new { permitYear = 2013 });
Run Code Online (Sandbox Code Playgroud)