2017-05-11 394 views
0

我有一个基本的存储过程SearchMovies如何在EF核心和Asp.net核心中调用Stored Proc?

alter PROCEDURE SearchMovies
@CategoryIds varchar(50) = null AS ...

我把从数据层的一些电话:

var categoryIds = new SqlParameter("CategoryIds", "6"); 

    var aaa = entities.FromSql("EXECUTE dbo.SearchMovies @CategoryIds", categoryIds); => empty values 

    var bbb= entities.FromSql("EXECUTE dbo.SearchMovies @CategoryIds={0}", categoryIds); => error: Must declare the scalar variable "@p0". 

    var ccc= entities.FromSql("EXECUTE dbo.SearchMovies @CategoryIds={0}", "6"); => works 

所以怎么来的第一个2个调用不工作,我跟着https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

谢谢大家。

已更新:

貌似我搞砸了东西。

var categoryIds = new SqlParameter("@CategoryIds", "6"); 
entities.FromSql("EXECUTE dbo.SearchMovies @CategoryIds", categoryIds) 

工作正常。

谢谢大家的帮助。

+0

将第二个查询更改为:entities.FromSql(“EXECUTE dbo.SearchMovies @CategoryIds”,categoryIds);'并试一试。在这种情况下不需要占位符。 –

+0

@Siva Gopal是的,我已经尝试了它的第一个电话=>空的结果 –

+0

'不工作'是什么意思?首先,参数名称是错误的。 SQL Server参数始终有一个“@”前缀。你得到一个错误,没有结果? –

回答

1

参数的名称是@CategoryIds而不是CategoryIds那么改变你的第一行是:

var categoryIds = new SqlParameter("@CategoryIds", 6); 
+0

entities.FromSql(“EXECUTE dbo.SearchMovies @CategoryIds”,categoryIds);新的SqlParameter(“@ CategoryIds”,6)=>仍然显示为空,另外两个显示如上所示的错误。多么奇怪。 –

+0

@namvo解释问题本身的问题,而不是评论。发布* actual *错误。无论如何,语法错误都会导致异常。 '显示空白'不是一个问题描述,或者是一个问题。为什么查询返回一些没有匹配行的东西?存储过程做什么? –

-1

您是否尝试过的值转换为字符串,因为你的程序需要VARCHAR?

var categoryIds = new SqlParameter("CategoryIds", Convert.ToString(6)); 
+0

该参数已经是字符串 –

+0

此外,'Convert.Tostring'只不过是对'whateverType.ToString()'的调用。 –