【发布时间】:2016-04-16 11:06:34
【问题描述】:
我有一个存储过程如下:
CREATE PROCEDURE [dbo].[MyProc]
@p1 as int,
@p2 as smalldatetime,
@p3 as int,
@p4 as varchar(255),
@p5 as int = null,
@p6 as numeric(18,2) = 0,
@p7 as char(2) = null
AS
...
当我执行以下命令时,我会得到结果:
EXEC dbo.MyProc
@p1 = 0,
@p2 = '5/29/2015',
@p3 = NULL,
@p4 = NULL,
@p5 = 233,
@p6 = 0,
@p7 = NULL
但是当我使用 Entity Framework 的 Database.SqlQuery 时,我得到了The parameterized query '(@p1 bigint @p2 datetime @p3 nvarchar(4' expects the parameter '@p1' which was not supplied. 下面是我使用的代码。
using (var context = new DbContext())
{
context.Database.ExecuteSqlCommand(
@"EXEC dbo.MyProc @p1, @p2, @p3, @p4, @p5, @p6, @p7",
new SqlParameter("p1", 0),
new SqlParameter("p2", myDate), //myDate has value
new SqlParameter("p3", DBNull.Value),
new SqlParameter("p4", DBNull.Value),
new SqlParameter("p5", myValue),//myValue has value
new SqlParameter("p6", 0),
new SqlParameter("p7", string.Empty));//I tried this with DBNull.Value; but no difference
}
谁能帮忙?
【问题讨论】:
-
你能试试 new SqlParameter("@p7", SqlChars.Null)
-
@jpgrassi,我看到你删除了你的评论。这是难以置信的。我将 p1 和 p6 的值都更改为 1。有效。为什么讨厌0?我需要传递值 0,该值设置为默认值以显示存储过程中的所有信息。不幸的是,我无法更改存储过程
-
@halit,我没有发现任何区别。
-
所有参数都应该以@开头
-
@halit,我试过了,但没有任何区别。请参阅下面大卫回答下的评论。
标签: c# asp.net-web-api sql-server-2012 entity-framework-6 .net-4.5