【问题标题】:Execute stored procedure with a default parameter使用默认参数执行存储过程
【发布时间】:2019-03-23 19:43:23
【问题描述】:

我需要使用带有三个参数的存储过程。第二个参数是默认值。我不允许修改存储过程。当我尝试使用实体框架执行存储过程时,我传递了第一个和第三个参数。我得到了没有提供第三个参数的错误。

这是存储过程的签名:

[dbo].[sp_CreateTest] 
      @Par1 NVARCHAR(25),
      @Par2 NVARCHAR(50) = 'Test',
      @Par3 NVARCHAR(50)

我正在尝试像这样执行它:

List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@Par1", "Parameter1 data"));
parameters.Add(new SqlParameter("@Par3", "Parameter3 data"));

testEnt.Database.ExecuteSqlCommand("exec dbo.sp_CreateTest @Par1, @Par3", parameters.ToArray());

【问题讨论】:

  • 您还可以从 C# 传递第二个参数,但不要为其赋值。如果你不传值,它将使用默认值。
  • 谢谢。你能告诉我如何不赋值吗?如果我做 parameters.Add(new SqlParameter("@Par2", null));我收到第二个参数未提供的错误
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • var parameter = new SqlParameter(); parameter.ParameterName = "@Part2"; parameters.Add(parameter);
  • 我根据你的建议修改了代码,我发现没有提供参数@Part2

标签: c# sql-server entity-framework


【解决方案1】:

您可以使用“默认”作为参数来代替第二个参数。 即

"exec dbo.sp_CreateTest @Par1,DEFAULT,@Par3"

【讨论】:

  • 我尝试了你的建议。我收到未提供@Par2 的错误
  • 你必须使用 DEFAULT 而不是 Default
【解决方案2】:

一种方法是使用命名参数表示法而不是位置表示法,以便为未指定的参数使用默认值。这也将避免与参数序数的紧密耦合。

testEnt.Database.ExecuteSqlCommand("exec dbo.sp_CreateTest @Par1=@Par1, @Par3=@Par3", parameters.ToArray());

【讨论】:

  • 根据经验,我认为这是更好的解决方案。
【解决方案3】:

例子:

 public class BlogContext : DbContext
 {

 public DbSet<Post> Posts { get; set; }

 public BlogContext(DbContextOptions<BlogContext> options) : base(options)
 {
 }

 protected override void OnModelCreating(ModelBuilder modelBuilder)
 {
     base.OnModelCreating(modelBuilder);

     modelBuilder.Entity<Post>().Property(p => p.Text).HasDefaultValue("Default");
 }

}

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2016-11-04
    • 2016-08-31
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多