C#中二进制数据与word文档之间的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中二进制数据与word文档之间的转换相关的知识,希望对你有一定的参考价值。

我在数据库中是用image类型来存二进制数据的。
这是把文件转换成二进制存入数据库的操作:
protected void btnUp_Click(object sender, EventArgs e)

int length = FileUpload1.PostedFile.ContentLength;

byte[] data = new byte[length];

FileUpload1.PostedFile.InputStream.Read(data, 0, length);

string strFileType = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower();

string strCom = "insert into filetest values(2,'" + data + "','" + strFileType + "')";

dataSql.Command(strCon, strCom, CommandType.Text, true);


这是把二进制数据读取出来,并在客户端打开的操作:
protected void btnDown_Click(object sender, EventArgs e)

SqlConnection con = new SqlConnection(strCon);
con.Open();
SqlCommand com = new SqlCommand("select * from filetest where id=2", con);
SqlDataReader dr = com.ExecuteReader();
if (dr.Read())

Page.Response.ContentType = dr["type"].ToString();
Page.Response.BinaryWrite(Convert.FromBase64String(dr["filedata"].ToString())); //这里出错,BinaryWrite()要二进制数组作参数,我没想到用哪个方法把字符串转换成二进制数组
Page.Response.End();



请问怎么解决,或者有没有更好的解决办法?
这个问题我自己已经解决,用的是text类型存储数据。现在又有新问题了:客户端用户打开文件的时候,不要在页面上打开,要在本地应用程序里打开!

参考技术A C#中二进制数据与word文档之间的转换
悬赏分:20 - 离问题结束还有 14 天 3 小时
我在数据库中是用image类型来存二进制数据的。
这是把文件转换成二进制存入数据库的操作:
protected void btnUp_Click(object sender, EventArgs e)

int length = FileUpload1.PostedFile.ContentLength;

byte[] data = new byte[length];

FileUpload1.PostedFile.InputStream.Read(data, 0, length);

string strFileType = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower();

string strCom = "insert into filetest values(2,'" + data + "','" + strFileType + "')";

dataSql.Command(strCon, strCom, CommandType.Text, true);


这是把二进制数据读取出来,并在客户端打开的操作:
protected void btnDown_Click(object sender, EventArgs e)

SqlConnection con = new SqlConnection(strCon);
con.Open();
SqlCommand com = new SqlCommand("select * from filetest where id=2", con);
SqlDataReader dr = com.ExecuteReader();
if (dr.Read())

Page.Response.ContentType = dr["type"].ToString();
Page.Response.BinaryWrite(Convert.FromBase64String(dr["filedata"].ToString())); //这里出错,BinaryWrite()要二进制数组作参数,我没想到用哪个方法把字符串转换成二进制数组
Page.Response.End();



请问怎么解决,或者有没有更好的解决办法?
问题补充:这个问题我自己已经解决,用的是text类型存储数据。现在又有新问题了:客户端用户打开文件的时候

C# 把word转成2进制存储到SQL2000中的问题

用FileUpload控件上传一个word文档,把这个文档转成二进制存进SQL2000中,数据库中对应的类型是image。类似于EMAIL中的附件上传,上传后转二进制存到数据库中。对方收到EMAIL,从附件中取的时候,再从SQL2000中读取出WORD文件下载。需求是存成2进制,就别说存路径的方法了。
回复
1楼的:你真是高手,就你知道不合理。
2楼的:我试过,但是图片取的时候C#有IMAGE类型,WORD我存什么类型?
3楼的:我也用过序列化,但是反序列化的时候还是遇到了不知道存什么类型拿出来。

参考技术A 可以呀,直接使用filestream读取字节数组就可以了。
这个和把图片保存到数据库的原理是一模一样的。

==========
问题补充回答:
你把doc文档看作图片保存就可以了。在这儿,关键是保存二进制数据,你不要想的太复杂了。在二进制情况下,是没有任何格式的,所以也不存在图片或者doc了。你把从doc中取到的字节数组直接保存到image字段中即可。
参考技术B 存数据库是最傻的方法............如果客户硬来也没办法,是不是觉得备份方便?呵呵。

楼主参考存图片的一样的方法。例如http://topic.csdn.net/t/20021025/10/1123704.html。
在WORD那里其实也可以存IMAGE类型。在SQL SERVER 2000那里二进制共3种类型,其中binary和varbinary都要指定字节数,而IMAGE不需要。顺便说一下,如果有可能的话建议用SQL SERVER 2005,那里改良了TEXT类型和IMAGE类型,用VARCHAR(MAX)和varbinary(MAX)来代替,操作更灵活。

在字段那里再加一个字段定义文件的原始文件名。
取出的时候还是将读出内容转成byte[]就OK了。

参考资料:http://topic.csdn.net/t/20021025/10/1123704.html

参考技术C 数据库数据类型用binary
存的时候转成byte []
读取的时候 (byte [])read.getvalue(列);
参考技术D 这种做法根本不合理 第5个回答  2008-07-04 序列化吧!

以上是关于C#中二进制数据与word文档之间的转换的主要内容,如果未能解决你的问题,请参考以下文章

如何使用C#将包含文字、图片和表格的二进制数据写入到word文件中

C#将richtextBox里的内容(图片文字)存入数据库

C# 对象文件与二进制串(byte数组)之间的转换

iOS开发中,将word,excel,pdf等文档的二进制流保存到本地(iPhone或iPad)的问题

C# 怎么处理Word文件的乱码

C#中二进制和流之间的各种相互转换