我正在构建一些C#桌面应用程序,我需要将文件保存到数据库中。我想出了一些文件选择器,它给了我正确的文件路径。现在我有问题如何使用它的路径将该文件保存到数据库中。
答案 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字段存储在数据库中,并使用您想要提供文件和文件类型的名称。
您可以撤消将文件重新输出的过程。