【发布时间】: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