Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在内存中操作SQL数据?_C#_Asp.net_Sql Server 2005 - Fatal编程技术网

C# 在内存中操作SQL数据?

C# 在内存中操作SQL数据?,c#,asp.net,sql-server-2005,C#,Asp.net,Sql Server 2005,我有一些表和许多与sql数据库一起工作的sotred过程。 出于演示目的,我想从我的sql表中将数据加载到内存中(可能是数据集,然后我可以将其存储在会话中-数据层是有限的,所以服务器内存上限不会成为问题?),并使用存储过程对其进行操作 可能吗?或者我需要重写所有存储过程,甚至用与数据集兼容的代码替换它们?如果您希望SQL Server在内存中管理表,则无法保证可以这样做 您可以创建一个表变量并用数据集填充它,它可能会存储在内存中 有关更多信息,请查看此答案: 另外,通过一些服务器配置,您可以将

我有一些表和许多与sql数据库一起工作的sotred过程。
出于演示目的,我想从我的sql表中将数据加载到内存中(可能是数据集,然后我可以将其存储在会话中-数据层是有限的,所以服务器内存上限不会成为问题?),并使用存储过程对其进行操作


可能吗?或者我需要重写所有存储过程,甚至用与数据集兼容的代码替换它们?

如果您希望SQL Server在内存中管理表,则无法保证可以这样做

您可以创建一个表变量并用数据集填充它,它可能会存储在内存中

有关更多信息,请查看此答案:

另外,通过一些服务器配置,您可以将tempdb放入ramdisk,这将有效地为您提供操作空间,不仅可以使用表变量和hope,还可以将数据集存储在临时表中,并确保它位于RAM中。查看此Microsoft文章:


编辑:我希望如果数据集适合服务器内存(以及它们配置的每个进程限制),它将存储在服务器内存中。但这只是一个有根据的猜测,因为我不熟悉ASP.NET的体系结构

理论上,您可以将整个数据库加载到内存中,甚至可以为每个会话存储数据库的副本。这是否是一个合理的做法,是一个不同的讨论。我听说所有成功的ASP应用程序都是无状态的


通过Transact-SQL过程或任何其他技术,让SQL Server操纵ADO.Net数据集所在的进程内存是绝对不可能的。要在ADO.Net数据集上操作,您必须在ASP.Net应用程序中将所有过程重写为CLR方法

您是否考虑过像SQLite这样的内存中数据库?查看此SO线程。还有其他选择。

存储过程存储在数据库中。没有办法让它们中的一个,一直在DB服务器中,在web服务器上的某个内存结构上运行--一个完全不同的地方

你要求做的有点像说你点了一个比萨饼,现在比萨饼已经送到你家了,你想让比萨饼店在不让比萨饼离开你家的情况下,为你随时更换馅饼皮。如果没有一些可以选择性地扭曲时空连续体甚至影响时间旅行的先进技术,这将永远不会发生


如果你必须在家里更换比萨饼,你要么要订一个新的,要么自己用自己的工具修改它。

事实上,你可以这样做。这很愚蠢,但也有可能

  • 您将所有表从SQL server加载到应用程序中
  • 创建包含数据的XML文档
  • 将XML发送到SQL存储过程(您必须创建新的存储过程)并对其进行处理
  • 说到比萨饼,这就像订购所有可能的配料从Domino发送到您的家中,您打开所有箱子,重新订购,然后将evrithing发送回Domino,以制作您想要的比萨饼


    祝你好运:D

    它不必在SQL server的内存中,而是在ASP server的内存中。我只想从sql中读取初始数据,填充像dataset这样的内存表并对其进行操作,但我想用现有的存储过程对其进行操作。若有,;我不可能做些什么来避免重写所有存储过程?@lupital问题是,此时数据集位于asp.net的内存中,而不是sql server的内存中,因此您现在必须不断地在sql server之间传输数据以对其进行操作。假设您指的是.net的DataSet类?@KeeperOfTheSoul,我只需要在初始数据集填充时从sql server传输一次数据。所有操作都将在数据集上进行。会话结束时,数据集也将消失。在SQL Server中,您实际上可以这样做吗?(确保整个数据库都驻留在内存中)如果数据库适合内存,请确保SQL Server将加载命中的每个页面,并且永远不会将其逐出。“为每个会话存储数据库副本”将为我提供帮助。怎么办?有在线文档吗?但是。。。但我想要一个新的外壳:(