设为首页 收藏本站
查看: 883|回复: 0

[经验分享] C#实现在Sql Server中存储和读取Word文件

[复制链接]

尚未签到

发表于 2015-6-28 12:01:06 | 显示全部楼层 |阅读模式
  要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为:



CREATE TABLE CONTRACTS (
ID VARCHAR (50),
CONTRACT_FILE IMAGE
);
  要将Word文件存储到数据库的CONTRACT_FILE字段中,需要将文件转换为byte数组,具体代码如下:


DSC0000.gif DSC0001.gif 将文件转换为byte数组


1  ///
2         /// 将文件转换为Bytes
3         ///
4         ///
5         ///
6         public static byte[] File2Bytes(string fileName)
7         {
8             FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read);
9             byte[] fileDatas = new byte[fs.Length];
10             fs.Read(fileDatas, 0, System.Convert.ToInt32(fs.Length));
11             fs.Close();
12             return fileDatas;
13         }
  然后将转换完成的byte[]存储到数据库的对应字段:


将文件存储到数据库


1  ///
2         /// 更新合同文件
3         ///
4         ///
5         ///
6         ///
7         public bool UpdateContractFile(string id, byte[] fileBytes)
8         {
9             string sql = "UPDATE CONTRACTS SET CONTRACT_FILE=@CONTRACT_FILE WHERE ID=@ID";
10             using (SqlConnection conn = new SqlConnection(this.m_DataAccess.ConnectString))
11             {
12                 conn.Open();
13                 using (SqlCommand cmd = new SqlCommand())
14                 {
15                     cmd.Connection = conn;
16                     cmd.CommandText = sql;
17                     cmd.Parameters.Clear();
18
19                     cmd.Parameters.Add(new SqlParameter("@CONTRACT_FILE", SqlDbType.Image));
20                     cmd.Parameters["@CONTRACT_FILE"].Value = fileBytes;
21
22                     cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.VarChar));
23                     cmd.Parameters["@ID"].Value = id;
24
25                     return cmd.ExecuteNonQuery() > 0 ? true : false;
26                 }
27             }
28         }
  要读取数据库中存储的Word文件,需要先将Image类型的字段转换为bytes[],具体代码如下:


通过ID获取文件byte数组


1 ///
2         /// 获取合同文件
3         ///
4         ///
5         ///
6         public byte[] GetContractFile(string id)
7         {
8             string sql = "SELECT CONTRACT_FILE FROM CONTRACTS WHERE ID='{0}'";
9             sql = string.Format(sql, id);
10             object contractFile;
11             contractFile = this.m_DataAccess.ExecuteScalar(sql);
12             if (contractFile == null)
13             {
14                 return new byte[0];
15             }
16             else
17             {
18                 return (byte[])contractFile;
19             }
20         }
  在获取到文件的byte[]后,将该文件通过文件流操作存储为Word文件,具体代码如下:


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


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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81164-1-1.html 上篇帖子: SQL Server表和字段的说明 下篇帖子: SQL Server 数据库迁移偏方
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表