2012-06-20 2 views
10

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

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

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

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

Я попытался назвать его

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

и

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

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

+3

Если это Transact-SQL, вам не хватает запятой между параметрами. :) – bricelam

+1

Конечно, конечно, и я :) – SWeko

ответ

16

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

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 with output parameter С уважением

+0

Значит ли это, что первый параметр установлен на '@ p0', второй на' @ p1' и т. Д.? – SWeko

+0

Похоже, что ... – Oscar

+0

попробовал, не работает – SWeko

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

Этот синтаксис работает нормально, проблема была в моем формате запроса. – SWeko

+0

Это всего лишь копия другого ответа из аналогичного вопроса, не корректируя контекст. http://stackoverflow.com/a/5475210/642054 –

Смежные вопросы