Вызов хранимых процедур с параметрами в PetaPoco

Я хочу иметь возможность вызывать хранимую процедуру с именованными параметрами в PetaPoco.

Чтобы вызвать хранимую процедуру, которая выполняет поиск/выборку:

Могу ли я сделать что-то вроде этого:

return db.Fetch<Customer>("EXEC SP_FindCust",
new SqlParameter("@first_name", fName),
new SqlParameter("@last_name", lName),
new SqlParameter("@dob", dob));

Кроме того, как я могу вызвать хранимую процедуру, которая выполняет вставку?

return db.Execute("EXEC InsertCust @CustID = 1, @CustName = AAA")

Спасибо, Нак.


person Tech Xie    schedule 05.08.2011    source источник
comment
Мне пришлось установить EnableAutoSelect = false. в противном случае petapoco продолжал пытаться вставить пункт выбора из моего EXEC   -  person Al W    schedule 07.11.2012
comment
Если вы добавите ; перед EXEC, PetaPoco не добавит SELECT: .Execute(";EXEC InsertCust @C   -  person Paddy    schedule 10.01.2013
comment
Добавление этой точки с запятой немного похоже на выполнение собственной SQL-инъекции. Я думаю, что db.EnableAutoSelect = false - более чистое решение.   -  person asherber    schedule 19.05.2017


Ответы (3)


Обновлять:

Я попробовал следующее для выборки и вставки, и это сработало отлично:

var s = PetaPoco.Sql.Builder.Append("EXEC SP_FindCust @@last_name = @0", lname);
s.Append(", @@first_name = @0", fName);
s.Append(", @@last_name = @0", lName);
s.Append(", @@dob = @0", dob);
return db.Query<Cust>(s);

Это может быть улучшено для передачи параметров SQL.

person Tech Xie    schedule 05.08.2011
comment
Привет, это большое спасибо, но вы знаете, как я могу вернуть личность из вставки? Мой сохраненный процесс: INSERT INTO t_Book VALUES(@BookName, @ParentBookId) SELECT @BookId = SCOPE_IDENTITY() - person Dr. Andrew Burnett-Thompson; 07.09.2011
comment
Вот и все: использование двойного @ для параметров процедуры сохранения и одиночного @ для параметров petapoco делает свое дело. Спасибо. - person JCallico; 25.11.2011

Начиная с версии 6.0.344-бета, PetaPoco теперь поддерживает хранимые процедуры без необходимости использования EXEC. См. https://github.com/CollaboratingPlatypus/PetaPoco/wiki/Stored-procedures

person asherber    schedule 24.11.2018

В моем случае я сделал следующее

db.EnableAutoSelect = false;

return db.Fetch<Customer>(@"EXEC SP_FindCust 
@@first_name = @first_name, 
@@last_name = @last_name, 
@@dob = @dob", new {
  first_name = fName,
  last_name = lName,
  dob = dob
});

Это сработало!

person Adnan Sharif    schedule 28.03.2019