C# 使用指针将一个大文件按顺序上载到数据库

C# 使用指针将一个大文件按顺序上载到数据库,c#,.net,file,ado.net,C#,.net,File,Ado.net,我的应用程序要求用户可以将文件上传到数据库。此时,用户上载文件并将其保存在临时目录中,然后逻辑加载字节[]中的文件,并将此数组作为参数传递给insert SQL语句 这种方法的问题在于,如果用户尝试上载1GB文件,则会导致服务器占用1GB内存,以便将该文件存储为字节[],并且该内存应在以后收集。如果多个用户同时这样做,服务器可能会崩溃 避免这种情况的一种方法是限制文件的大小。。。但客户不想这样做。因此,最好的方法似乎是使用指针按顺序将文件上载到数据库。我已经为找到了一个这样的例子,但我想知道一种

我的应用程序要求用户可以将文件上传到数据库。此时,用户上载文件并将其保存在临时目录中,然后逻辑加载字节[]中的文件,并将此数组作为参数传递给insert SQL语句

这种方法的问题在于,如果用户尝试上载1GB文件,则会导致服务器占用1GB内存,以便将该文件存储为字节[],并且该内存应在以后收集。如果多个用户同时这样做,服务器可能会崩溃

避免这种情况的一种方法是限制文件的大小。。。但客户不想这样做。因此,最好的方法似乎是使用指针按顺序将文件上载到数据库。我已经为找到了一个这样的例子,但我想知道一种对所有类型的数据库都有效的方法,即知道是否可能以及如何将文件分块上传到数据库


干杯。

我认为这样的事情是不可能的


更好的选择可能只是将文件存储在数据库服务器上的一个路径中,并仅将该文件的路径存储在数据库中。这将完全消除将文件加载到内存中的需要。您可以使用FTP,也可以简单地将文件复制到数据库服务器,具体取决于网络配置。

正如其他人所指出的,我还认为在文件系统上存储文件是更好的选择。请注意,您可以配置共享文件夹或文件服务器,以便轻松移动应用程序


无论如何,若您必须将大型二进制数据以块的形式写入数据库,那个么不同数据库的写入方式将有所不同。您需要在该数据库的ADO.NET数据提供程序中检查这种支持。下面是解释如何为Sql Server和Oracle读写大块大数据的示例。由于方式会随着数据库或托管提供程序的不同而变化,因此您必须将API抽象为一些接口,并根据接口编写代码。然后创建特定于数据库的实现,并使用factory或IOC等选择实现。

是否有充分的理由不将文件存储在某个目录中,并让数据库包含引用该文件的记录?是,客户希望只移动数据库就可以将应用程序移动到其他服务器。我仍然会与我的客户讨论这样做的优缺点,因为实际上数据库不是用来存储文件的,而文件系统是。。。如果处理得当,移动数据库和单个文件文件夹的工作量不会太大。客户希望能够将应用程序移动到其他服务器,而只移动数据库。