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