C# 如果有文件路径,如何在SQL Server数据库中保存文件?

C# 如果有文件路径,如何在SQL Server数据库中保存文件?,c#,sql-server,sql-server-2005,C#,Sql Server,Sql Server 2005,我正在构建一些C#桌面应用程序,我需要将文件保存到数据库中。我已经想出了一些文件选择器,它为我提供了正确的文件路径。现在我有一个问题,如何使用文件的路径将该文件保存到数据库中 这实际上取决于文件的类型和大小。如果是文本文件,则可以使用file.ReadAllText()获取可以保存在数据库中的字符串 如果不是文本文件,则可以使用file.ReadAllBytes()获取文件的二进制数据,然后将其保存到数据库中 不过要小心,数据库不是存储繁重文件的好方法(您会遇到一些性能问题)。您需要将文件存储到

我正在构建一些C#桌面应用程序,我需要将文件保存到数据库中。我已经想出了一些文件选择器,它为我提供了正确的文件路径。现在我有一个问题,如何使用文件的路径将该文件保存到数据库中

这实际上取决于文件的类型和大小。如果是文本文件,则可以使用
file.ReadAllText()
获取可以保存在数据库中的字符串

如果不是文本文件,则可以使用
file.ReadAllBytes()
获取文件的二进制数据,然后将其保存到数据库中


不过要小心,数据库不是存储繁重文件的好方法(您会遇到一些性能问题)。

您需要将文件存储到字节数组中,然后将其存储为数据库中的blob字段,可能还需要指定文件名和文件类型

您可以将文件再次放出来的过程颠倒过来

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
int numBytes = new FileInfo(fileName).Length;
byte[] buff = br.ReadBytes(numBytes);

然后像其他任何东西一样将其上传到DB,我假设您使用的是varbinary列(BLOB)

如果您使用的是SQL Server 2008,您可以使用(入门指南)。从C#中使用此功能的一个例子是。

所以filestream就是它,但由于您使用的是SQL 2K5,因此必须以读入内存的方式来执行;这会消耗大量资源

第一个列类型varchar(max)是您的朋友,它可以提供约2Gb的数据供您使用,这对于大多数用途来说都相当大

接下来,将数据读入字节数组并将其转换为Base64String

FileInfo _fileInfo = new FileInfo(openFileDialog1.FileName);
                if (_fileInfo.Length < 2147483647) //2147483647 - is the max size of the data 1.9gb
                {
                    byte[] _fileData = new byte[_fileInfo.Length];
                    _fileInfo.OpenRead().Read(_fileData, 0, (int)_fileInfo.Length);
                    string _data = Convert.ToBase64String(_fileData);
                }
                else
                {
                    MessageBox.Show("File is too large for database.");
                }
您希望在使用完这些字符串后尽快将其设置为string.empty,以处置这些字符串


但如果可以,只需升级到2008并使用FILESTREAM。

您使用的是哪个版本的SQL Server?请不要使用名称或标记“mssql”。没有这样的产品,使用这些产品会让人们以后更难找到你的问题。-1任何建议将整个文件加载到字节[]中的解决方案都应该在我的book@RemusRusanu在这种情况下,你会建议什么解决方案?
byte[] _fileData  = Convert.FromBase64String(_data);