[转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)
出处 C#实现在Sql Server中存储和读取Word文件
要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为:
CREATE TABLE CONTRACTS (
ID VARCHAR (50),
CONTRACT_FILE IMAGE
);
要将Word文件存储到数据库的CONTRACT_FILE字段中,需要将文件转换为byte数组,具体代码如下:
/// 将文件转换为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[]存储到数据库的对应字段:
/// 将文件存储到数据库
/// <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[],具体代码如下:
/// 通过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文件
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文件 (Not Correct Modified)的更多相关文章
- sql server 中后缀为.mdf的文件是干什么用的??
在微软的SQL Server 2000 数据库有三种类型的文件: 1)主要数据文件(扩展名.mdf是 primary data file 的缩写) 主要数据文件包含数据库的启动信息,并指向数据库中的其 ...
- [转载]在SQL Server 中,如何实现DBF文件和SQL Server表之间的导入或者导出?
原来使用SQL Server 2000数据库,通过DTS工具很方便地在SQL Server和DBF文件之间进行数据的导入和导出,现在安装了SQL Server2005之后,发现其提供的“SQL Ser ...
- SQL Server中2008及以上 ldf 文件过大的解决方法
在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为“自动收缩”外,还可以使用下面的SQL命令进行快速清除数据库中的事务日志,命令如下: - 第一步:清空日志 ALTER DAT ...
- SQL SERVER中的逻辑读取,物理读取,以及预读的理解
在SQLSERVER查询分析器中,当我们用Set Statistics on 语句来统计SQL语句或者存储过程I/O的时候, SQLSERVER会显示几个概念去词语:逻辑读取,物理读取,预读. 如下: ...
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
原文:SQL Server中的TempDB管理--TempDB基本知识(为什么需要版本存储区) 参考资料来自: http://blogs.msdn.com/b/sqlserverstorageengi ...
- SQL Server中TempDB管理(版本存储区的一个example)
原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive ...
- SQL Server中的GUID
GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID ...
- SQL Server 列存储索引强化
SQL Server 列存储索引强化 SQL Server 列存储索引强化 1. 概述 2.背景 2.1 索引存储 2.2 缓存和I/O 2.3 Batch处理方式 3 聚集索引 3.1 提高索引创建 ...
- 在SQL Server中对视图进行增删改
原文:在SQL Server中对视图进行增删改 Lesktop开源IM发布以后,有一些网友问及如何在嵌入IM后与自己网站的用户系统整合(即如何让嵌入的IM直接使用网站原有的用户数据库,而不需要将已有的 ...
随机推荐
- fedora 26 Mysql
安装 Fedora用dnf默认安装的使Mariadb,即 [*****@localhost ~]$ sudo dnf install mysql-server ... [*****@localhost ...
- [译]贵宾犬咬伤了TLS
原文链接:https://community.qualys.com/blogs/securitylabs/2014/12/08/poodle-bites-tls 原文发表时间:2014.12.8 今天 ...
- 如何实现一个可以用 await 异步等待的 Awaiter
.NET 和 C# 共同给我们带来的 async/await 异步编程模型(TAP)用起来真的很爽.为了实现异步等待,我们只需要在一切能够能够异步等待的方法前面加上 await 即可.能够异步等待的最 ...
- 《DSP using MATLAB》示例Example 8.1
终于看到第8章了,加油,继续努力! N为奇数,有极点位于实数轴上.事实上,所有极点位于Ωc=0.5为半径的圆上,而不是单位圆.
- .NET平台上的Model-View-Presenter模式实践
为什么要写这篇文章 笔者当前正在负责研究所中一个项目,这个项目基于.NET平台,初步拟采用C/S部署体系,所以选择了Windows Forms作为其UI.经过几此迭代,我们发现了一个问题:虽然业务逻辑 ...
- bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案,把 >= mid 的设成1.< mid 的设成0,之后排序就变成 ...
- git仓库
关于仓库,我们先搞清楚三个概念:本地仓库.远程仓库和上游仓库.本地仓库是从远程仓库clone出来的,远程仓库可以从上游仓库fork出来.这里的clone和fork都是复制的意思,区别是本地和远程都是针 ...
- jeecg中ajax传值的前端js和后台代码
前端js: var b=1; $.ajax({ type : "POST", --Post请求方式 url : 'orderController.do?wuliao', --路径 ...
- python的mp3play库试用
没有见过比这个更小型的库了,下面程序实现的功能:播放音乐,按空格键实现暂停和播放的切换. #coding=utf-8 import mp3play import pythoncom, pyHook i ...
- mac下的virtualbox启动失败处理
不知从哪个版本开始,mac下的virtualbox建立vm以后,启动就提示什么驱动没有加载,google后,解决如下 sudo /Library/Application\ Support/Virtua ...