テーブル値を返すストアドプロシージャがあります。
これが私のストアドプロシージャです:
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
PetaPocoを使用してストアドプロシージャを実行し、返されたデータをテーブルとして取得する方法があるかどうかわかりませんか?助けてください!
通常どおり、次のスクリプトを使用してストアドプロシージャを実行できますが、それは私が望む方法ではありません。
db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");
EXECの前にセミコロンを付ける必要があります。
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);
答えはおそらく遅いですが、将来の世代に役立つことを願っています。 PetaPocoデータベースオブジェクトdb.EnableAutoSelect = false;
でEnableAutoSelectオプションをfalseに設定する必要があります。そうしないと、SQLステートメントにSELECT NULL FROM [Object]
が追加され続けます。
PetaPocoソースをデバッグできるのは良いことです。このオプションはデバッグのためだけに見つかりました。
あなたはList<T>
ここで、Tは、マップするプロパティを持つPOCOタイプ、またはDynamic
したがって、実際の構文は次のとおりです。
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @0", 2013);
または
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @permitYear",
new {permitYear = 2013});
V6.0.344-beta以降、PetaPocoはストアドプロシージャをネイティブにサポートするようになったため、次のことができます。
var result = db.FetchProc<MyClass>("GetPermitPendingApproval", new { permitYear = 2013 });