【问题标题】:ASP.NET & SQL Server : can #temp-table be used by an ASP.NET webforms application?ASP.NET & SQL Server:#temp-table 可以被 ASP.NET webforms 应用程序使用吗?
【发布时间】:2018-03-23 14:20:35
【问题描述】:

在我们使用 SQL Server 的 ASP.NET 4.6 网络表单应用程序中,我们希望页面使用 #temptable,但我们无法让它工作。 Page1 在 SQL Server 中创建 #temptable,然后启动 Page2,将 #temptable 放入要在网格内编辑的 GridView。

Page2 被加载并且对浏览器可见时,#temptable 的范围似乎没有超出服务器上的Page1

我们正在考虑在数据库本身中使用一个表,而不是#temptable。此外,其他用户可能能够编辑同一个表但具有不同的“数据”。我们认为#temptable 将属于特定用户(来自浏览器)。

任何指导将不胜感激。谢谢...约翰。

回答:根据@Faruq 的解释,我们将为每个用户使用一个普通的数据库表。

【问题讨论】:

  • @hardkoded ##TempTable 在这种情况下不是解决方案。
  • 这两者将毫无关系。临时表存在于创建它的事物的范围内,例如存储过程。它与页面没有任何关系。您需要研究一种不同的机制来执行此操作,但还要看看为什么需要像这样临时移动信息。也许第 1 页和第 2 页可以合并到同一个页面中,但不同的区域在视图状态中使用相同的数据来完成构建,然后再将其发送到数据库。

标签: asp.net sql-server-2012 webforms


【解决方案1】:

恐怕#tempTable 和##tempTable 都不适合您。让我解释一下。

本地临时表:
当您在 SQL Server 中使用#someName 时,它会创建一个临时表,其范围为当前数据库连接。在您的情况下,#tempTable 是在 Page1 中创建的,并在 Page1 中关闭数据库连接后立即删除。因此,当您从 Page2 打开连接时,该表不再存在。

全局临时表:
当您使用##someName(注意双哈希)时,它会创建一个可从多个连接访问的全局临时表。在某种程度上,这就像一个普通的数据库表,但位于tempdb 内,并且通常比普通表慢。在您的情况下,您需要每个用户一个表;所以全局临时表不符合该标准。

会话存储:
如果数据很小,可以考虑存储在会话变量中。此外,还有一个选项可以将 Asp.Net 会话配置为使用 SQL 数据库。我以前从未这样做过,但这是你可以研究的。但是,将对象存储在会话变量中时要非常小心,因为所有引用的对象(及其引用的对象等)也会被序列化并存储在会话中。

数据库表
在我看来,最好的办法是使用普通的数据库表来存储所有用户的数据,并使用带有 per-user-key 的列(如 SessionId)来保持数据分离。您还必须实施cleanup 技术来清除旧数据。

【讨论】:

  • 非常感谢@Faruq。这就是答案。你的解释很清楚,我理解每个部分。所以当我们考虑一个普通的数据库表时,我们的团队的想法是正确的(见原始问题)。我们用用户的唯一登录名命名表。并将所有更改保存到此临时表。然后,Page2 上的用户可以“保存所有”或“取消所有”更改(插入、更新和删除)。感谢您的出色回复。我要给你积分!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多