Каков правильный синтаксис для использования Database.ExecuteSqlCommand с параметрами?

Я использую Entity Framework 4.2 и хочу вызвать хранимую процедуру с входными параметрами. Я использую Database.ExecuteSqlCommand для вызова хранимой процедуры.

Однако для правильного отображения параметров в документации отсутствует правильный синтаксис вызова. Мой google-foo терпит неудачу, и любая помощь будет оценена.

т.е. У меня есть процедура

procedure SetElementFrequency
  @ElementTypeID integer,
  @Frequency float
as ...

Я пробовал называть его

Database.ExecuteSqlCommand("exec SetElementFrequency @p0 @p1", 
                            elementType, frequency);

и

Database.ExecuteSqlCommand("exec SetElementFrequency {0} {1}", 
                            elementType, frequency);

но оба они не работают с ошибкой. Неправильный синтаксис рядом с '@p1'.

Ответ 1

В зависимости от поставщика базовой базы данных вы можете использовать одно из следующих значений.

Database.ExecuteSqlCommand(
    "exec SetElementFrequency {0}, {1}",
    elementType, frequency); 

или

Database.ExecuteSqlCommand("exec SetElementFrequency ?, ?", elementType, frequency); 

Вы также можете указать elementType и frequency как объекты DbParameter, чтобы предоставить свои собственные имена с помощью ParameterName.

Ответ 2

Попробуйте что-то вроде этого:

context.Database.ExecuteSqlCommand("delete MasterSmsCampaignCertificateInfo where      MasterSmsCampaignGuid = @p0 and CertificateId = @p1",
TheCampaignGuid,
certInfo.CertificateId);

Взгляните на этот похожий вопрос: ExecuteSqlCommand с параметром вывода С наилучшими пожеланиями

Ответ 3

var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);