博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)
阅读量:6113 次
发布时间:2019-06-21

本文共 2818 字,大约阅读时间需要 9 分钟。

出处

 

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

CREATE TABLE CONTRACTS (          ID VARCHAR (50),          CONTRACT_FILE IMAGE      );

 

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

/// 将文件转换为byte数组  ///   /// 将文件转换为Bytes  ///   ///   /// 
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[]存储到数据库的对应字段:

 

/// 将文件存储到数据库  ///   /// 更新合同文件  ///   ///   ///   /// 
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[],具体代码如下:

/// 通过ID获取文件byte数组  ///   /// 获取合同文件  ///   ///   /// 
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文件

 

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("下载文件失败!");      }

 

 

 

 

 

转载地址:http://aocka.baihongyu.com/

你可能感兴趣的文章
SignalR在Xamarin Android中的使用
查看>>
走过电竞之路的程序员
查看>>
Eclipse和MyEclipse使用技巧--Eclipse中使用Git-让版本管理更简单
查看>>
[转]响应式表格jQuery插件 – Responsive tables
查看>>
8个3D视觉效果的HTML5动画欣赏
查看>>
C#如何在DataGridViewCell中自定义脚本编辑器
查看>>
【linux】crontab定时命令
查看>>
Android UI优化——include、merge 、ViewStub
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
iOS知识小集·设置userAgent的那件小事
查看>>
移动端架构的几点思考
查看>>
Tomcat与Spring中的事件机制详解
查看>>