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
c# word excel 二进制 存入数据库的更多相关文章
- word excel文件 存入数据库 实战
上传: private void Insert2017(HttpContext context) { if (context.Request.Files["fileword"].C ...
- asp.net将图片转成二进制存入数据库
一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...
- MVC4.0 上传Excel并存入数据库
这里的这个功能实现在WebForm很好实现,上传阶段简单的一个FileUoLoad控件就搞定了,什么取值,什么上传都是浮云,微软都帮我们封装好了,我们只需要一拖一拽就OK了,但这些在MVC中是不行的! ...
- MyBatis框架(三)动态SQL,分页,二进制存入数据库图片
一.动态sql语句,分页 1, <if>条件 <if test="key!=null"> 拼接sql语句 </if> 2, <choose ...
- PHP - 读取EXCEL内容 存入数据库
<?php //设置请求头 header("Content-Type:text/html;charset=utf8"); header("Access-Contro ...
- java 使用poi读取word文档存入数据库
使用的poi jar包需要自己下载 读取的word文档中含有多个图片,所以分为两个部分,一个部分读取各个表格中内容,一个是将所有图片截取出来: /** * 遍历段落内容 * docxReadPath ...
- ASP.Net将图片以二进制方式存入数据库,并读取
把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e) { string path = this.tex ...
- asp.net FileUpload 控件上传文件 以二进制的形式存入数据库并将图片显示出来
图片上传事件代码如下所示: byte[] binary = upload.FileBytes; StringBuilder sqlStrSb = new StringBuilder(); sqlStr ...
- 使用python把图片存入数据库-乾颐堂
一般情况下我们是把图片存储在文件系统中,而只在数据库中存储文件路径的,但是有时候也会有特殊的需求:把图片二进制存入数据库. 今天我们采用的是python+mysql的方式 MYSQL 是支持把图片存入 ...
随机推荐
- mysql数据库创建删除带横杠的数据库名
mysql> create database d-d; ERROR 1064 (42000): You have an error in your SQL syntax; check the m ...
- [Python]网络爬虫(四):Opener与Handler的介绍和实例应用(转)
在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info() ...
- List多个字段标识过滤
class Program { public static void Main(string[] args) { List<T> list = new List<T>(); ...
- 安卓编译报错:Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
今天在编译别人的project时遇到了这个错误,心想应该不是代码的问题.网上搜了一下,应该是sdk版本设置的问题,要设置为最新sdk版本才可以. 解决办法就是修改project.properties里 ...
- 微信小程序请求wx.request数据,渲染到页面
先说一下基本使用.官网也有. 比如说你在App.js里面有这些变量.想修改某些值. data: { main_view_bgcolor: "", border: "&qu ...
- PHP设计模式系列 - 观察者模式处理订单(异步操作附加功能)
观察者模式 观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性.观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码 ...
- Node.js开发入门—使用cookie保持登录
这次来做一个站点登录的小样例,后面会用到. 这个演示样例会用到Cookie.HTML表单.POST数据体(body)解析. 第一个版本号,我们的用户数据就写死在js文件中. 第二个版本号会引入Mong ...
- Unity3D安卓交互 - 使代码运行在UI线程
runOnUiThread(new Runnable() { public void run() { // TODO Auto-generated method stub } });
- ZOJ 3635 Cinema in Akiba (第一次组队) 树状数组+二分
Cinema in Akiba Time Limit: 3 Seconds Memory Limit: 65536 KB Cinema in Akiba (CIA) is a small b ...
- angular初体验
所有需要ng管理的代码必须被包裹在一个有ng-app指令的元素中ng-app是ng的入口,表示当前元素的所有指令都会被angular管理(对每一个指令进行分析和操作) 利用angular实现双向绑定: ...