Каков правильный синтаксис для использования 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);

но они оба терпят неудачу с ошибкойIncorrect syntax near '@p1'.

 bricelam20 июн. 2012 г., 19:20
Если это Transact-SQL, вам не хватает запятой между параметрами. :)
 SWeko21 июн. 2012 г., 08:56
Конечно, да, и, конечно, я

Ответы на вопрос(3)

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

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

 Oscar20 июн. 2012 г., 17:23
Так выглядит ...
 Oscar20 июн. 2012 г., 17:31
Вы пытались передать их как массив? context.Database.ExecuteSqlCommand ("удалить MasterSmsCampaignCertificateInfo, где MasterSmsCampaignGuid = @ p0 и CertificateId = @ p1", новый объект [] {TheCampaignGuid, certInfo.CertificateId});
 SWeko20 июн. 2012 г., 17:12
Значит ли это, что первый параметр установлен в@p0, второй после@p1, и так далее
 SWeko21 июн. 2012 г., 08:57
Этот синтаксис работает нормально, проблема была в сгенерированном запросе.
 SWeko20 июн. 2012 г., 17:29
попробовал, не работает
Решение Вопроса

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

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

ил

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

Вы также можете указатьelementType а такжеfrequency какDbParameter -объекты для предоставления ваших собственных имен черезParameterName свойство

var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
 Ryan Kyle17 февр. 2015 г., 23:15
Это просто копия другого ответа на аналогичный вопрос без учета контекста. Stackoverflow.com / а / 5475210/642054
 SWeko21 июн. 2012 г., 08:56
Этот синтаксис работает нормально, проблема была с моим форматом запроса.

Ваш ответ на вопрос