Ответ 1
Вам нужно поставить точку с запятой перед EXEC.
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);
У меня есть хранимая процедура, которая возвращает значение таблицы.
Вот моя хранимая процедура:
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 для выполнения хранимой процедуры и получения возвращаемых данных в виде таблицы? Пожалуйста, помогите!
Как обычно, я могу выполнить хранимую процедуру с помощью script, но это не так, как я хочу.
db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");
Вам нужно поставить точку с запятой перед EXEC.
var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);
Ответ, вероятно, поздний, но я надеюсь, что он будет полезен для будущих поколений. Вы должны включить параметр EnableAutoSelect в значение false для объекта базы данных PetaPoco db.EnableAutoSelect = false;
В противном случае он добавит SELECT NULL FROM [Object]
к вам выражение sql.
Хорошо, что можно отлаживать источники 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});