【问题标题】:Retrieve data from SQL Server stored procedure into an array将 SQL Server 存储过程中的数据检索到数组中
【发布时间】:2015-03-16 22:11:23
【问题描述】:

我正在尝试从我的数据库中获取数据并将其放入数组中。

我试过这段代码:

DataClassesDataContext DS = new DataClassesDataContext();

protected void Page_Load(object sender, EventArgs e)
{
    List<string> _news = new List<string>();

    for (int i = 0; i <= 4; i++)
    {
        _news.Add(DS.select_top_five_news().ElementAt(i).ToString());
    }
}    

但它没有返回我想要的任何东西,并给了我这个错误:

指定的参数超出了有效值的范围。
参数名称:索引

这是我使用的存储过程:

CREATE PROCEDURE select_top_five_news
AS  
   RETURN 
       SELECT top 5 * 
       FROM news 
       ORDER BY newsid DESC

问题是存储过程的结果是作为单个结果返回的,我需要循环进入它以获取每个单独的记录

请帮忙!还是以其他方式实现相同的目标?

【问题讨论】:

  • 在尝试从中获取信息之前,您没有在 DS 中填充数据
  • 以及如何填充数据?

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


【解决方案1】:

由于您的程序已经为您过滤数据,您只需执行以下操作。您的程序将返回最多 5 个结果,因此您收到的就是您所得到的。如果您需要默认实体,则必须循环并添加缺少的项目,而不是从结果中拉出现有项目。

DataClassesDataContext DS = new DataClassesDataContext();
protected void Page_Load(object sender, EventArgs e)
{
    var _news = DS.select_top_five_news().ToList();
}

如果您直接使用实体,您会这样做。

DataClassesDataContext DS = new DataClassesDataContext();
protected void Page_Load(object sender, EventArgs e)
{
    var _news = DS.News.OrderBy(n => n.ID).Take(5).ToList();
}

【讨论】:

  • 我需要获取检索到的五条记录中的每条记录
  • 假设您的新闻表中有 5 条记录,这两个语句都将起作用。根据您提供给我们的信息,如果您没有收到 5 条记录,那是因为您没有 5 条记录。您已经缩短了存储过程的结果,如果您提供所需的列,我可以定制答案。
  • 问题是 sp 的结果是作为单个结果返回的,我需要循环进入它以获取每个单独的记录
  • 从 DS.select_top_five_news() 返回的内容是什么?您应该会看到类似于 ObjectResult 的内容。这是一个集合,其中包含从您的过程返回的每条记录的一个实体。您不需要手动循环它。只要您的过程已正确导入,Entity Framework 就会为您解析结果。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多