[转] 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直接使用网站原有的用户数据库,而不需要将已有的 ...
随机推荐
- Linux服务器运行环境搭建(三)——MySQL数据库安装
官网:http://www.mysql.com/ 官网下载地址:http://dev.mysql.com/downloads/mysql/ 说明:官网下载页面的“Select Platform” 选择 ...
- python第三方库
autopy autopy是一个自动化操作的python库,可以模拟一些鼠标.键盘事件,还能对屏幕进行访问 pywin32 win32api的python封装 PIL python的图形图像处理框架
- modelsim仿真常用系统函数
(1)$time 作用:返回所在模块的仿真时间,可以查看信号的出现的时间,用来把握信号的时序. 如:$display(''the time is %t'',$time) ;//显示当时的时间 (2)$ ...
- 40+个对初学者非常有用的PHP技巧
1.不要使用相对路径,要定义一个根路径 这样的代码行很常见: require_once('../../lib/some_class.php'); 这种方法有很多缺点: 它首先搜索php包括路径中的指定 ...
- C#数据路接口中获取SQL数据的用法
获取一条记录 string sql = string.Format(“”); DataRow row; if (GetFirstDataRow(sql, out row)) { ...
- Python 函数 memoryview()
memoryview() 函数返回给定参数的内存查看对象(Momory view). 所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问.返回元组列表 ...
- ThinkPHP5 为什么取消了单字母函数?
ThinkPHP5 为什么取消了单字母函数? 更容易理解. 理加规范. 个人喜好. 比如 TPShop 也是用 ThinkPHP5 又加回单字母函数. [话唠]教练,我想做菜-长沙 2018/10/8 ...
- 老齐python-基础2(字符串)
1.字符串 1.1索引和切片 索引: >>> lang = "study python" >>> lang[0] 's' >>> ...
- 关于如何利用Pocket CHM Pro制作帮助文档
关于如何利用Pocket CHM Pro制作帮助文档 编写人:CC阿爸 2015-4-6 今天在这里,我想与大家一起分享如何利用Pocket CHM Pro制作软件系统的帮助文档,在此做个小结,以供参 ...
- Redis: temple
ylbtech-Redis: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返回顶部 8.返回顶部 9.返回顶部 1 ...