如何从存储过程中以列表形式返回结果?

时间:2019-05-28 22:08:01

标签: c# sql sql-server asp.net-mvc

以前这很好,最近该行停止了工作。此代码使用数据库上下文来运行过程并以列表格式返回它。由于某种原因,我没有看到该错误,只是看到该操作失败,因为它没有执行。

我在SQL Server中运行了存储过程,并看到了所需的结果,只是没有看到它在应用程序层中发生了。

[Http.Route("postsearch")]
public async Task<IHttpActionResult> PostSearch(SearchInputDTO srequest)
{
   var searchString = srequest.SearchValue.ToString();            
   List<output> seResult = new List<output>(_output.searchLog(searchString)); /*This line stopped working*/
   return Ok(seResult);
}

存储过程:

SET FMTONLY OFF
GO
SET NOCOUNT ON
GO

ALTER PROCEDURE [dbo].[searchLog]
    @searchValue VARCHAR(150)
AS
    SELECT *  
    FROM [dbo].[output]
    WHERE CONTAINS (*, @searchValue)

在实体框架中的实现

public virtual int searchLog(string searchValue)
{
    var searchValueParameter = searchValue != null ?
            new ObjectParameter("searchValue", searchValue) :
            new ObjectParameter("searchValue", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("searchLog", searchValueParameter);
}

这应该返回查询中的行。

2 个答案:

答案 0 :(得分:1)

我发现的解决方案是在Visual Studio中修改存储过程的输出。

答案 1 :(得分:0)

尝试删除列表的新实例,然后像这样

List<output> seResult = _output.searchLog(searchString);

将存储的过程更新为

@searchValue varchar(150)

AS

BEGIN

SELECT
  [ColumnName1]
  ,[ColumnName2] ...etc...
FROM [dbo].[output]
WHERE CONTAINS (*,@searchValue) 

END