如何将图片或其它文件保存到数据库中(C#)

下面的示例可以保存所有的文件格式。

 

1 首先在数据库中建立表用于存储文件的基本信息与文件流。建表 SQL 如下:

 

[c-sharp] view plaincopy
  1. IF OBJECT_ID('Files') IS NOT NULL  
  2.     DROP TABLE Files  
  3. GO  
  4. -- FileKey: 主键  
  5. -- FileName: 文件名  
  6. -- FileExtension: 扩展名  
  7. -- CreateDateTime: 创建时间  
  8. CREATE TABLE Files(  
  9.     FileKey uniqueidentifier NOT NULL,  
  10.     FileName nvarchar(128) NOT NULL,  
  11.     FileExtension nvarchar(128) NOT NULL,  
  12.     FileContent varbinary(MAX) NOT NULL,  
  13.     CreateDateTime datetime NOT NULL  
  14.     PRIMARY KEY(FileKey)  
  15. )  

 

 

 

2 如何将本地文件保存到数据库

 

[c-sharp] view plaincopy
  1. const string ConnectionString = @"Data Source=XP01/SQLEXPRESS;Initial Catalog=X;Integrated Security=SSPI;";  
  2. /// <summary>  
  3. /// 将本地文件保存到数据库中  
  4. /// </summary>  
  5. private void SaveFileToDb(string filePath)  
  6. {  
  7.     string fileName = Path.GetFileName(filePath);  
  8.     string fileExtension = Path.GetExtension(filePath);  
  9.     byte[] fileContent = this.GetFileStream(filePath);  
  10.     string commandText = @"  
  11. INSERT INTO Files(FileKey, FileName, FileExtension, FileContent, CreateDateTime)  
  12. VALUES (@FileKey, @FileName, @FileExtension, @FileContent, @CreateDateTime)";  
  13.     using (SqlConnection conn = new SqlConnection(ConnectionString))  
  14.     {  
  15.         SqlCommand comm = new SqlCommand(commandText, conn);  
  16.         comm.Parameters.AddWithValue("@FileKey", Guid.NewGuid());  
  17.         comm.Parameters.AddWithValue("@FileName", fileName);  
  18.         comm.Parameters.AddWithValue("@FileExtension", fileExtension);  
  19.         comm.Parameters.AddWithValue("@FileContent", fileContent);  
  20.         comm.Parameters.AddWithValue("@CreateDateTime", DateTime.Now);  
  21.         conn.Open();  
  22.         comm.ExecuteNonQuery();  
  23.     }  
  24. }  
  25. /// <summary>  
  26. /// 将一个文件转换成 byte[]  
  27. /// </summary>  
  28. /// <param name="filePath">文件路径</param>  
  29. public byte[] GetFileStream(String filePath)  
  30. {  
  31.     using (FileStream fileStream = new FileStream(filePath, FileMode.Open))  
  32.     {  
  33.         byte[] vals = new byte[(int)fileStream.Length];  
  34.         fileStream.Read(vals, 0, vals.Length);  
  35.         return vals;  
  36.     }  
  37. }  

 

 

 

3 如何将 byte[] 写入到文件

 

[c-sharp] view plaincopy
  1. byte[] fileContent = (byte[])drv["fileContent"]; // drv 是 DataRowView  
  2. File.WriteAllBytes(filePath, fileContent);  

 

 

posted @ 2012-12-04 20:07  Net-Spider  阅读(930)  评论(0)    收藏  举报