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

时间:2010-01-23 00:17:54

标签: c# sql-server sql-server-2005

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

5 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:5)

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)

答案 2 :(得分:2)

所以文件流就可以了,但是因为你使用的是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。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

您可以撤消将文件重新输出的过程。