【问题标题】:What is the correct syntax for using Database.ExecuteSqlCommand with parameters?使用带参数的 Database.ExecuteSqlCommand 的正确语法是什么?
【发布时间】:2012-06-22 17:41:23
【问题描述】:

我使用 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'附近的语法不正确。

【问题讨论】:

  • 如果这是 Transact-SQL,则参数之间缺少逗号。 :)
  • 当然是,我当然是:)

标签: sql sql-server entity-framework


【解决方案1】:

试试这样的:

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

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

【讨论】:

  • 那么这是否意味着第一个参数设置为@p0,第二个设置为@p1,以此类推?
  • 您是否尝试过将它们作为数组传递? context.Database.ExecuteSqlCommand("删除 MasterSmsCampaignCertificateInfo 其中 MasterSmsCampaignGuid = @p0 和 CertificateId = @p1", new object[]{ TheCampaignGuid, certInfo.CertificateId});
  • 这是一个params参数,所以应该没关系,是的,我也试过了:)
  • 这个语法工作正常,问题出在生成的查询中。
【解决方案2】:
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);

【讨论】:

  • 这个语法很好用,问题出在我的查询格式上。
  • 这只是一个类似问题的另一个答案的副本,没有根据上下文进行调整。 stackoverflow.com/a/5475210/642054
【解决方案3】:

根据您的底层数据库提供程序,您可以使用以下任一种。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多