使用 PetaPoco 执行存储过程

Posted

技术标签:

【中文标题】使用 PetaPoco 执行存储过程【英文标题】:Execute stored procedure with PetaPoco 【发布时间】:2013-12-06 06:28:32 【问题描述】:

我有一个返回表值的存储过程。

这是我的存储过程:

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

我不确定我们是否有这样的方式来并以表格的形式获取返回的数据?请帮忙!

通常我可以使用以下脚本执行存储过程,但这不是我想要的方式。

db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");

【问题讨论】:

【参考方案1】:

您需要在 EXEC 之前放置一个分号。

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);

【讨论】:

你能解释一下为什么需要分号吗?这是由于 PetaPoco 中某些内部实现的原因吗? @rdans 是的,它可以解决“;”允许您结束第一个语句以开始另一个语句。换句话说,这忽略了 petapoco 插入的第一条语句,使其未使用。【参考方案2】:

答案可能已经晚了,但我希望它对后代有用。您应该在 PetaPoco 数据库对象 db.EnableAutoSelect = false; 上将 EnableAutoSelect 选项设置为 false 否则它会继续添加SELECT NULL FROM [Object] 到你的 sql 语句。

很好,可以调试 PetaPoco 源。我发现这个选项只是因为调试!

【讨论】:

【参考方案3】:

您会得到List&lt;T&gt;,其中 T 是具有您要映射的属性的 POCO 类型或 Dynamic

所以实际的语法是:

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @0", 2013);

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @permitYear",
                                                       new permitYear = 2013);

【讨论】:

它不起作用,这是一个错误:来自此查询字符串“SELECT NULL FROM [Object] EXEC GetPermitPendingApproval”的无效对象名称'[Object]'【参考方案4】:

从 v6.0.344-beta 开始,PetaPoco 现在原生支持存储过程,因此您可以:

var result = db.FetchProc<MyClass>("GetPermitPendingApproval", new  permitYear = 2013 );

【讨论】:

以上是关于使用 PetaPoco 执行存储过程的主要内容,如果未能解决你的问题,请参考以下文章

使用 PetaPoco 将表值参数传递给存储过程

PetaPoco 和存储过程的输出参数?

PetaPoco 访问SQL SERVER 存储过程

如何使用 petapoco 创建 DAL [关闭]

带类型参数的 PetaPoco 查询

动态查询的最佳选择?