使用带参数的Database.ExecuteSqlCommand的正确语法是什么?

时间:2012-06-20 14:43:14

标签: sql sql-server entity-framework

我使用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”附近错误语法不正确而失败。

3 个答案:

答案 0 :(得分:16)

根据您的基础数据库提供程序,您可以使用以下任一方法。

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

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

您还可以将elementTypefrequency指定为基于DbParameter的对象,以通过ParameterName属性提供您自己的名称。

答案 1 :(得分:2)

尝试这样的事情:

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

看看这个类似的问题: ExecuteSqlCommand with output parameter 最好的问候

答案 2 :(得分:2)

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