如果有文件路径,如何在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字段存储在数据库中,并使用您想要提供文件和文件类型的名称。
您可以反转将文件重新输出的过程。
- asp.net c#SqlDataSource timout问题
- 从另一个类访问表单控件
- WebRequest不包含Windows 10 Universal App的“GetResponse”定义
- FileStream的同步要求。(开始/结束)(读/写)
- 如何将字符串转换为颜色? 对于Windows Phone c#
- 远程服务器返回错误:(407)需要代理validation
- 如何在ASP.NET Core中validationDI容器?
- ProtoBuf-Net和Compact Framework中的“源数据中的无效字段:0”错误
- 是否可以使用Autodesk.AutoCAD.Interop在AutoCAD中编辑块属性?