2012-06-20 78 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); 

你也可以指定elementTypefrequencyDbParameter基于对象通过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 –