在使用SQL Server的ASP.NET 4.6 webforms应用程序中,我们希望页面使用#temptable
,但我们无法使其工作。 Page1
在SQL Server中创建#temptable
,然后启动Page2
,希望将#temptable
放入要在网格中编辑的GridView中。
当#temptable
加载并且对浏览器可见时,Page1
的范围似乎不会超出Page2
。
我们正在考虑在数据库本身中使用一个表,而不是#temptable
。此外,其他用户可能能够编辑同一个表但使用不同的数据"。我们认为#temptable
属于特定用户(来自浏览器)。
任何指导将不胜感激。谢谢...约翰。
答案:根据@ Faruq的解释,我们将为每个用户使用普通的数据库表。
答案 0 :(得分:1)
我担心#tempTable和## tempTable都不适合你。让我解释一下。
本地临时表:
在SQL Server中使用#someName
时,它会创建一个具有当前数据库连接范围的临时表。在您的情况下,#pageTable在Page1中创建,并在Page1中关闭数据库连接后立即删除。因此,当您从Page2打开连接时,该表格不再存在。
全球临时表:
当您使用##someName
(注意双重哈希)时,它会创建一个可从多个连接访问的全局临时表。在某种程度上,它的工作方式类似于普通的数据库表,但它位于tempdb
内,通常比普通表慢。在您的情况下,每个用户需要一个表;所以全球临时表并不符合这个标准。
会话存储:
如果数据很小,您可以考虑存储在会话变量中。此外,还有一个选项可以配置Asp.Net会话以使用SQL数据库。我之前从未这样做过,但这是你可以研究的。但是,在会话变量中存储对象时要非常小心,因为所有引用的对象(及其引用的对象等)都将被序列化并存储在会话中。
数据库表
在我看来,您最好的选择是使用普通的数据库表来存储所有用户'数据并使用 per-user-key (如SessionId)的列来保持数据分离。您还必须实现清理技术来清除旧数据。