【问题标题】:How to return results from stored procedure as a List?如何将存储过程的结果作为列表返回?
【发布时间】:2019-05-28 22:08:00
【问题描述】:

以前这很好用,最近线路停止工作。此代码使用 DB 上下文运行一个过程并以 List 格式返回它。出于某种原因,我没有看到错误,我只是看到操作失败,因为它没有执行。

我在 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);
}

这应该返回查询中的行。

【问题讨论】:

  • 你的问题描述很模糊。我不知道您所说的“我看看是否失败”是什么意思。如果代码之前可以正常工作,它可能没有任何问题,因此您几乎没有给我们任何实质内容。
  • Action 返回内部错误。
  • 您需要确定内部错误是什么,例如通过记录异常。
  • 哦,我明白了。您没有在顶部包含方法声明,这将非常有帮助。 ExecuteFunction 返回一个整数,表示返回的行数。这个数字似乎是0,解释了错误。之前可能是 1 或更多(例如,如果数据库发生更改),这就是它之前“工作”的原因,尽管我不知道它是如何返回任何行的。
  • 你能发布searchLog的签名定义吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    更新存储过程到

    @searchValue varchar(150)
    
    AS
    
    BEGIN
    
    SELECT
      [ColumnName1]
      ,[ColumnName2] ...etc...
    FROM [dbo].[output]
    WHERE CONTAINS (*,@searchValue) 
    
    END
    

    【讨论】:

    • 我试过了,但收到一个错误,指出无法将 int 转换为 List。
    • 我可以看看你的 searchLog 方法吗?
    • 我对原始帖子进行了编辑,现在显示它。
    • 我看到了您的存储过程,但我没有看到您的 searchLog 方法。您使用的是什么 ORM?以及您如何访问该存储过程。你能帮我一个忙,然后右键单击 .searchLog 并单击“转到实施”
    • 我正在使用实体框架并通过数据库上下文访问存储的过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2015-06-03
    • 2013-06-21
    相关资源
    最近更新 更多