如何将图片或其它文件保存到数据库中(C#)
下面的示例可以保存所有的文件格式。
1 首先在数据库中建立表用于存储文件的基本信息与文件流。建表 SQL 如下:
- IF OBJECT_ID('Files') IS NOT NULL
- DROP TABLE Files
- GO
- -- FileKey: 主键
- -- FileName: 文件名
- -- FileExtension: 扩展名
- -- CreateDateTime: 创建时间
- CREATE TABLE Files(
- FileKey uniqueidentifier NOT NULL,
- FileName nvarchar(128) NOT NULL,
- FileExtension nvarchar(128) NOT NULL,
- FileContent varbinary(MAX) NOT NULL,
- CreateDateTime datetime NOT NULL
- PRIMARY KEY(FileKey)
- )
2 如何将本地文件保存到数据库
- const string ConnectionString = @"Data Source=XP01/SQLEXPRESS;Initial Catalog=X;Integrated Security=SSPI;";
- /// <summary>
- /// 将本地文件保存到数据库中
- /// </summary>
- private void SaveFileToDb(string filePath)
- {
- string fileName = Path.GetFileName(filePath);
- string fileExtension = Path.GetExtension(filePath);
- byte[] fileContent = this.GetFileStream(filePath);
- string commandText = @"
- INSERT INTO Files(FileKey, FileName, FileExtension, FileContent, CreateDateTime)
- VALUES (@FileKey, @FileName, @FileExtension, @FileContent, @CreateDateTime)";
- using (SqlConnection conn = new SqlConnection(ConnectionString))
- {
- SqlCommand comm = new SqlCommand(commandText, conn);
- comm.Parameters.AddWithValue("@FileKey", Guid.NewGuid());
- comm.Parameters.AddWithValue("@FileName", fileName);
- comm.Parameters.AddWithValue("@FileExtension", fileExtension);
- comm.Parameters.AddWithValue("@FileContent", fileContent);
- comm.Parameters.AddWithValue("@CreateDateTime", DateTime.Now);
- conn.Open();
- comm.ExecuteNonQuery();
- }
- }
- /// <summary>
- /// 将一个文件转换成 byte[]
- /// </summary>
- /// <param name="filePath">文件路径</param>
- public byte[] GetFileStream(String filePath)
- {
- using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
- {
- byte[] vals = new byte[(int)fileStream.Length];
- fileStream.Read(vals, 0, vals.Length);
- return vals;
- }
- }
3 如何将 byte[] 写入到文件
- byte[] fileContent = (byte[])drv["fileContent"]; // drv 是 DataRowView
- File.WriteAllBytes(filePath, fileContent);
浙公网安备 33010602011771号