ASP.NET& SQL Server:ASP.NET webforms应用程序可以使用#temp-table吗?

时间:2018-03-23 14:20:36

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

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

#temptable加载并且对浏览器可见时,Page1的范围似乎不会超出Page2

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

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

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

1 个答案:

答案 0 :(得分:1)

我担心#tempTable和## tempTable都不适合你。让我解释一下。

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

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

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

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