[转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

出处 C#实现在Sql Server中存储和读取Word文件

 

要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为:

1
2
3
4
CREATE  TABLE  CONTRACTS ( 
     ID  VARCHAR  (50), 
     CONTRACT_FILE IMAGE 
); 

 

要将Word文件存储到数据库的CONTRACT_FILE字段中,需要将文件转换为byte数组,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// 将文件转换为byte数组 
/// <summary> 
/// 将文件转换为Bytes 
/// </summary> 
/// <param name="fileName"></param> 
/// <returns></returns> 
public  static  byte [] File2Bytes( string  fileName) 
     FileStream fs =  new  FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read); 
     byte [] fileDatas =  new  byte [fs.Length]; 
     fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length)); 
     fs.Close(); 
     return  fileDatas; 
}

 
然后将转换完成的byte[]存储到数据库的对应字段:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// 将文件存储到数据库 
/// <summary> 
/// 更新合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <param name="fileBytes"></param> 
/// <returns></returns> 
public  bool  UpdateContractFile( string  id,  byte [] fileBytes) 
     string  sql =  "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID"
     using  (SqlConnection conn =  new  SqlConnection( this .m_DataAccess.ConnectString)) 
    
         conn.Open(); 
         using  (SqlCommand cmd =  new  SqlCommand()) 
        
      cmd.Connection = conn; 
      cmd.CommandText = sql; 
      cmd.Parameters.Clear(); 
       
      cmd.Parameters.Add( new  SqlParameter( "@CONTRACT_FILE" , SqlDbType.Image)); 
      cmd.Parameters[ "@CONTRACT_FILE" ].Value = fileBytes; 
       
      cmd.Parameters.Add( new  SqlParameter( "@ID" , SqlDbType.VarChar)); 
      cmd.Parameters[ "@ID" ].Value = id; 
       
       return  cmd.ExecuteNonQuery() > 0 ?  true  false
        
    
}

 

 

 

 

要读取数据库中存储的Word文件,需要先将Image类型的字段转换为bytes[],具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// 通过ID获取文件byte数组 
/// <summary> 
/// 获取合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <returns></returns> 
public  byte [] GetContractFile( string  id) 
     string  sql =  "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'"
     sql =  string .Format(sql, id); 
     object  contractFile; 
     contractFile =  this .m_DataAccess.ExecuteScalar(sql); 
     if  (contractFile ==  null
    
return  new  byte [0]; 
    
     else 
    
return  ( byte [])contractFile; 
    
}

 


在获取到文件的byte[]后,将该文件通过文件流操作存储为Word文件,具体代码如下:

将byte[]数组存储为Word文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
byte [] fileBytes =  this .m_ContractsBusiness.GetContractFile(id); 
if  (fileBytes.Length == 0) 
     XMessageBox.ShowError( "未找到合同文件!" ); 
     return
SaveFileDialog sfd =  new  SaveFileDialog(); 
sfd.Filter =  "Word文件(*.doc)|*.doc"
if  (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     try 
    
         string  saveFileName = sfd.FileName; 
         int  arraysize =  new  int (); //注意这句话 
         arraysize = fileBytes.GetUpperBound(0); 
         FileStream fs =  new  FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write); 
         fs.Write(fileBytes, 0, arraysize); 
         fs.Close(); 
         if  (XMessageBox.ShowQuestion( "文件下载成功,是否立即打开文件?" ) == 
             System.Windows.Forms.DialogResult.Yes) 
        
             Process.Start(saveFileName); 
        
    
     catch  (Exception ex) 
    
         XMessageBox.ShowError( "下载文件失败!" ); 
     }

 

 

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




出处 C#实现在Sql Server中存储和读取Word文件

 

要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为:

1
2
3
4
CREATE  TABLE  CONTRACTS ( 
     ID  VARCHAR  (50), 
     CONTRACT_FILE IMAGE 
); 

 

要将Word文件存储到数据库的CONTRACT_FILE字段中,需要将文件转换为byte数组,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// 将文件转换为byte数组 
/// <summary> 
/// 将文件转换为Bytes 
/// </summary> 
/// <param name="fileName"></param> 
/// <returns></returns> 
public  static  byte [] File2Bytes( string  fileName) 
     FileStream fs =  new  FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read); 
     byte [] fileDatas =  new  byte [fs.Length]; 
     fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length)); 
     fs.Close(); 
     return  fileDatas; 
}

 
然后将转换完成的byte[]存储到数据库的对应字段:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// 将文件存储到数据库 
/// <summary> 
/// 更新合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <param name="fileBytes"></param> 
/// <returns></returns> 
public  bool  UpdateContractFile( string  id,  byte [] fileBytes) 
     string  sql =  "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID"
     using  (SqlConnection conn =  new  SqlConnection( this .m_DataAccess.ConnectString)) 
    
         conn.Open(); 
         using  (SqlCommand cmd =  new  SqlCommand()) 
        
      cmd.Connection = conn; 
      cmd.CommandText = sql; 
      cmd.Parameters.Clear(); 
       
      cmd.Parameters.Add( new  SqlParameter( "@CONTRACT_FILE" , SqlDbType.Image)); 
      cmd.Parameters[ "@CONTRACT_FILE" ].Value = fileBytes; 
       
      cmd.Parameters.Add( new  SqlParameter( "@ID" , SqlDbType.VarChar)); 
      cmd.Parameters[ "@ID" ].Value = id; 
       
       return  cmd.ExecuteNonQuery() > 0 ?  true  false
        
    
}

 

 

 

 

要读取数据库中存储的Word文件,需要先将Image类型的字段转换为bytes[],具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// 通过ID获取文件byte数组 
/// <summary> 
/// 获取合同文件 
/// </summary> 
/// <param name="id"></param> 
/// <returns></returns> 
public  byte [] GetContractFile( string  id) 
     string  sql =  "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'"
     sql =  string .Format(sql, id); 
     object  contractFile; 
     contractFile =  this .m_DataAccess.ExecuteScalar(sql); 
     if  (contractFile ==  null
    
return  new  byte [0]; 
    
     else 
    
return  ( byte [])contractFile; 
    
}

 


在获取到文件的byte[]后,将该文件通过文件流操作存储为Word文件,具体代码如下:

将byte[]数组存储为Word文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
byte [] fileBytes =  this .m_ContractsBusiness.GetContractFile(id); 
if  (fileBytes.Length == 0) 
     XMessageBox.ShowError( "未找到合同文件!" ); 
     return
SaveFileDialog sfd =  new  SaveFileDialog(); 
sfd.Filter =  "Word文件(*.doc)|*.doc"
if  (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     try 
    
         string  saveFileName = sfd.FileName; 
         int  arraysize =  new  int (); //注意这句话 
         arraysize = fileBytes.GetUpperBound(0); 
         FileStream fs =  new  FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write); 
         fs.Write(fileBytes, 0, arraysize); 
         fs.Close(); 
         if  (XMessageBox.ShowQuestion( "文件下载成功,是否立即打开文件?" ) == 
             System.Windows.Forms.DialogResult.Yes) 
        
             Process.Start(saveFileName); 
        
    
     catch  (Exception ex) 
    
         XMessageBox.ShowError( "下载文件失败!" ); 
     }

 

 

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5699763.html ,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
7月前
|
SQL 数据库
SQL Server 附加数据库,报只读文件,无权修改其中某些文件
SQL Server 附加数据库,报只读文件,无权修改其中某些文件
172 0
|
10月前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
SQL 数据挖掘 数据库
数据库数据恢复-SQL SERVER数据库文件误还原备份的数据恢复方案
SQL SERVER数据库故障类型: 1、SQL SERVER数据库文件被删除。 2、SQL SERVER数据库所在分区格式化。 3、SQL SERVER数据库文件大小变为“0”。 4、使用备份还原数据库时覆盖原数据库。
|
机器学习/深度学习 SQL
SQL Server提示:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位置。。。。
今天在安装SQL Server的过程中,出现问题:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位,然后单击“下一步”,可从以下位置下载安装文件。
SQL Server提示:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位置。。。。
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
96 0
|
数据库 数据库管理
sqlite数据库文件导入到sqlserver
sqlite数据库文件导入到sqlserver
455 0
|
存储 SQL 数据库
SQLServer数据库文件相关知识笔记
数据库文件是SQLServer数据库的物理体现,和计算机的普通文件一样存储在计算机的磁盘空间当中。作为数据库记录和日志等其他信息的存储载体。
SQLServer数据库文件相关知识笔记
sqlserver导出带数据的脚本文件(下)
sqlserver导出带数据的脚本文件(下)
150 0
sqlserver导出带数据的脚本文件(下)
|
SQL 安全 程序员
sqlserver导出带数据的脚本文件(上)
sqlserver导出带数据的脚本文件(上)
278 0
sqlserver导出带数据的脚本文件(上)