zoukankan      html  css  js  c++  java
  • c# word excel 二进制 存入数据库

    在Sql Server中存储、读写Word文件,需要将指定表字段添加为Image类型,示例表结构为:
    1 CREATE TABLE CONTRACTS (
    2 ID VARCHAR (50),
    3 CONTRACT_FILE IMAGE
    4 );
    CONTRACT_FILE字段就是要存储Word文件的字段,在存储前,有一个小插曲,你需要将Word文件转换为byte数组,可参考以下代码实现:
    1 //将文件转换为byte数组
    2 public static byte[] File2Bytes(string fileName)
    3 {
    4 FileStream fs = new FileStream(fileName,FileMode.OpenOrCreate, FileAccess.Read);
    5 byte[] fileDatas = new byte[fs.Length];
    6 fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length));
    7 fs.Close();
    8 return fileDatas;
    9 }
    接下来就是将转换后的byte[]数组存储到SqlServer的对应字段中,具体实现代码可看如下代码段:
    01 //将文件存储到数据库
    02 public bool UpdateContractFile(string id, byte[] fileBytes)
    03 {
    04 string sql = "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID";
    05 using (SqlConnection conn = new SqlConnection(this.m_DataAccess.ConnectString))
    06 {
    07 conn.Open();
    08 using (SqlCommand cmd = new SqlCommand())
    09 {
    10 cmd.Connection = conn;
    11 cmd.CommandText = sql;
    12 cmd.Parameters.Clear();
    13 cmd.Parameters.Add(new SqlParameter("@CONTRACT_FILE", SqlDbType.Image));
    14 cmd.Parameters["@CONTRACT_FILE"].Value = fileBytes;
    15 cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar));
    16 cmd.Parameters["@ID"].Value = id;
    17 return cmd.ExecuteNonQuery() > 0 ? true : false;
    18 }
    19 }
    20 }
    同时,因之前转换了数据类型,所以从数据库中读取Word文件时,要先将Image类型的字段转换为bytes[],代码如下:
    01 //通过ID获取文件byte数组
    02 public byte[] GetContractFile(string id)
    03 {
    04 string sql = "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'";
    05 sql = string.Format(sql, id);
    06 object contractFile;
    07 contractFile = this.m_DataAccess.ExecuteScalar(sql);
    08 if (contractFile == null)
    09 {
    10 return new byte[0];
    11 }
    12 else
    13 {
    14 return (byte[])contractFile;
    15 }
    16 }
    在获取到文件的byte[]后,将该文件再通过文件流存储为Word文件,以下代码可实现此功能:
    01 //将byte[]数组存储为Word文件
    02 byte[] fileBytes = this.m_ContractsBusiness.GetContractFile(id);
    03 if (fileBytes.Length == 0)
    04 {
    05 XMessageBox.ShowError("未找到合同文件!");
    06 return;
    07 }
    08 SaveFileDialog sfd = new SaveFileDialog();
    09 sfd.Filter = "Word文件(*.doc)|*.doc";
    10 if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    11 {
    12 try
    13 {
    14 string saveFileName = sfd.FileName;
    15 int arraysize = new int();
    16 arraysize = fileBytes.GetUpperBound(0);
    17 FileStream fs = new FileStream(saveFileName, FileMode.OpenOrCreate, FileAccess.Write);
    18 fs.Write(fileBytes, 0, arraysize);
    19 fs.Close();
    20 if (XMessageBox.ShowQuestion("文件存储成功,是否立即打开文件?") ==
    21 System.Windows.Forms.DialogResult.Yes)
    22 {
    23 Process.Start(saveFileName);
    24 }
    25 }
    26 catch (Exception ex)
    27 {
    28 XMessageBox.ShowError("操作失败!");
    29 }
    上面的几段代码只是核心代码,并不是完整的代码段,用时候要看清,自己再修改下。
    from:https://zhidao.baidu.com/question/1668174604263928547.html
  • 相关阅读:
    通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法
    小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统
    送给那些经常问我如何设置360测速结果为电信的朋友,360测速模块原理简单分析
    Universal-Image-Loader(UIL)使用方法&流程图&源码分析 ----- 未完
    Android开发框架
    Android线程池的使用(未完)
    Android LruCache究竟是什么
    Java finally语句到底是在return之前还是之后执行?
    Android自定义图片加载框架
    Android 自定义View实现单击和双击事件
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/6932275.html
Copyright © 2011-2022 走看看