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

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

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); 

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

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

如果它不是文本文件,那么您可以使用File.ReadAllBytes()来获取文件的二进制数据,然后将其保存到数据库中。

但请注意,数据库不是存储繁重文件的好方法(您会遇到一些性能问题)。

所以文件流就是它,但是既然你正在使用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."); } 

并扭转恢复过程

 byte[] _fileData = Convert.FromBase64String(_data); 

您可以通过在完成使用后立即将它们设置为string.empty来尽快处理这些字符串!

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

如果您使用的是SQL Server 2008,则可以使用FILESTREAM ( 此处为入门指南)。 这里使用来自C#的此function的示例。

您需要将该文件放入一个字节数组中,然后将其作为blob字段存储在数据库中,并使用您想要提供文件和文件类型的名称。

您可以反转将文件重新输出的过程。