我有一个存储过程如下:
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
但是,当我使用实体框架的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 }
有人可以帮忙吗?
“由于某种原因,当我传递0时,它将转换为BigInt。我不知道为什么。我将0解析为int并起作用了。
using (var context = new DbContext()) { context.Database.ExecuteSqlCommand( @"EXEC dbo.MyProc @p1, @p2, @p3, @p4, @p5, @p6, @p7", new SqlParameter("p1", int.Parse("0"), new SqlParameter("p2", myDate), new SqlParameter("p3", DBNull.Value), new SqlParameter("p4", DBNull.Value), new SqlParameter("p5", myValue), new SqlParameter("p6", int.Parse("0")), new SqlParameter("p7", DBNull.Value)); }