【问题标题】:Access The Data Retrieved访问检索到的数据
【发布时间】:2012-12-26 06:39:40
【问题描述】:

我这几天一直在努力寻找这个问题的答案,我很难相信这是不可能的。

我想访问在构建页面时 ASP.NET 运行时自动调用 SqlDataSource.Select 方法时构建的 DataSet/DataTable

我知道我可以在后面的代码中运行它,但这会导致第二次访问数据库,我真的很想避免这种情况。我遇到的每个示例都告诉您在后面的代码中执行 Select 方法。

有没有办法访问已经检索到的数据?

【问题讨论】:

  • 你知道,几年前我曾试图弄清楚这一点,并决定在代码隐藏中绑定代码更容易,这样我更容易访问数据集。如果有人知道如何做到这一点,它可能会改变我处理类似情况的方式。 +1 询问。
  • 我根本不会使用那个控件。而是使用 ADO.NET(f.e. DataAdapter.Fill(DataTable)) 或真正的 ORM 映射器,如 NHibernate 或实体框架。无论如何,尚不清楚您为什么认为“背后的代码第二次访问数据库”。然后使用if(!IsPostBack)
  • 在控件上真的没有选择。我需要对现有页面进行更改,并且没有重写它的奢侈。当您在 SqlDataSource 上调用 Select 方法时,它会根据 Microsoft msdn.microsoft.com/en-us/library/… 访问数据库

标签: c# asp.net ado.net sqldatasource


【解决方案1】:

您可以尝试使用此代码 - 基于 ToTable 方法

DataView view = (DataView)SqlDataSource.Select(...);
DataTable table = view.ToTable();

链接:http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

【讨论】:

  • 这就是我说的代码。对 SqlDataSource 执行 Select 方法会从数据库中检索数据。 (msdn.microsoft.com/en-us/library/…) 我已经用过很多次了,但在这种情况下,我想避免第二次旅行。
  • “避免第二次旅行”意味着您已经在某处获得了数据。在这种情况下,您能否通过提供一个虚拟的DataSource 在预渲染期间拦截对OnSelect() 的调用,并用您自己的(缓存的?)数据集替换结果数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多