数据库varbinary(MAX)到RichText Box

时间:2016-08-11 05:04:21

标签: c# asp.net ms-word ckeditor richtextbox

这里我保存了数据库中的.Doc文件,我使用了varbinary(MAX)数据类型。现在我想将varbinary(MAX)字段绑定到Richtext框,这里我使用下面的代码将二进制格式数据读取为字符串类型。

string Query = "Select Name, ContentType, DocFileText from <TableNAme> where Id=5";
            SqlCommand cmd = new SqlCommand(Query, con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            con.Open();
            SqlDataReader sqlRead = cmd.ExecuteReader(); 
            while (sqlRead.Read())
            {      
           byte[] fileData = ((byte[])sqlRead["DocFileText"]);
            Richtextbox1.Text = Encoding.ASCII.GetString(fileData);            
              }

但数据应采用不可读的格式,如:

PK!0?(r?[Content_Types].xml ?(??T?n?0?W??D?V??????[??0??z??l?I?Q?B? \"%?????????l ?w%?=???^i7+???%?g&??0?A?6?l4??L60#????S ????X??&??V$z?3??3 ??????%p)O5?????5}?:?`?e????V?DFK??)_:?K%?)?l??\?!??U?'?v?7?&j?X??*,??+W^.,???????W????k??D?????X?????>??N!??FZ??&0m??ly??)?q?9??d}???@??????????R??/??s???*&:t??g?????????8Y?O?[??&V0}?X????????>?#??;?F?io.????PK!???N_rels/.rels ?(????JA???a?}7? "???H?w"????w?????? ?P?^????O?????;?<?aY????`G?kxm??PY?[??g G??ino?/"f3??\???T??I S??????????W????Y ig?@??X6_?]7~ f?????ao?.b*lI?r?j)?,l0?%??b? 6?i???D?_???, ? ???|u?Z^t??y??;!Y,}{?C??/h>??PK!??? ?word/_rels/document.xml.rels ?(????J?0?????n????l?????v???$?j?????..??K`?????0??L'????YI?@[????????? D mK?9? ?Ooovo?i?G?i? ?? Q?,e(4:D?G?7??F????.>u?r?[???^x?C???{??s??????_\q4h?J?H?????FRpR"?ya?* ?p???d?x{49z??Dp?? ?kB?Nc)?3Ybx\??r?2?w3?????&?7??Vr&?@??oK??PK!??????2word/document.xml?Y[O?0~????r????BiCH????.???????_?s?84?-a-#??;>??|>N..??P?S.?u???5{l??}???{??5!I??@???Z#sl?}?????M??iuK??B?? ???]????=???O?F??o????ba?)??Nw8,Ht'pn6??P7??p)N?*97?tl???#'L???????se~??;?Y??;???}?K?????v???M??????K???j?>U????+g?^U|?????C N???M?~%????a???????H??m?/?&?M_?i=??????VQN?0?J?@??l??J?|!U??4[]S%??7?$?i7:?bB???Nl??{uH5""3%hA?:?g?????n???:????@??xi%?z_vZ?*U?m??u??2?Jq??'?3?h???1Q?, ??????'??;??g?? ?Ev?????0$??`XmtGr??!?e_?}v??#??????????dT?h+?j-,A?%#???6? ??w?????|UOQ4????E?ga?V???#?????w2?|????????~????WH??X????t?^^???O????????lK?=?K????? ?93?.????????????ev?j??????|?4?y0??e?????=FV ??^?r?Zh9#??_vvsN3?r????????\m?]??1Y n4?X/2?.??`?%O?a????A??l??????N?d???????PK!?????Pword/theme/theme1.xml?YOo?6??w toc'vu????-M?n?i???P?@?I}?????a??m?a[????4?:l???GR??X^?6???>$?????????!)O?^?r?C$?y@?????/?yH*??????)?????????UDb?`}"?q???J?????X^?)I`n?E???p)???li?V[]?1M???G?M?Ge???D?????3Vq%'#q??????$?8??K?????)f?w9:????? x}r?x????w???r?:\TZaG?*?y8I?j?bR??c|X??????I u3KG?nD1?NIB?s??? ??R??u???K>V?.EL+M2?#'?f??i~?V??vl?{u8??z??H? ?*????:?(W???? ~??J??T?e\O*?tHG??HY???}KN??P?*???????T???9/#??A7?qZ??$*c????qU??n??w?N??%??O??i??4=3??P?? ????1?P?m\\9?????????M???2a?D?]?;Yt?\????[x??????]?}Wr??|?]??g-??? eW? ?)6-r??CS?j?? i?d ?D??A???IqbJ#x????6k???#??A?Sh???&??t(Q?%??p%m??&]?caSl=?X???????\P?1?Mh?9?M???V?dDA??aV?B??[??fJ???P|8???A?V^???f ?H??n???-??"??d>?z???n????? ?????>??b???&?????2??v????Ky?????D:????,AGm??\nz??i?????.u??YC?6?OMf??3o?r??$??5?????NH?T[XF64?T,?????M0?E)`#?5?XY?`???;??%?1?U???m;???R>QD????D?cp?U?'??&LE?/p???m????%]?????8fi??r?S4?d7y\?`?J??n??????I?R???3U?~7+?????#??m?q?BiD??????????i*?L6?9??m?Y&?????i???HE??=(K&?N!V??.K?e?LD????{D ????vE???de??N????e?(?MN9??R??6????&3(??a????/D??U?z???)???D????_??k??wXXub?????(?9??8?????????????<4??u?>?p?? ???F????

我在这里使用

 Encoding.UTF8.GetString(fileData);
            Encoding.Unicode.GetString(fileData);

但这些也行不通。 如何将Doc文件从数据库读取到richtextbox?

我上传的代码是:

 string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
        Stream str = FileUpload1.PostedFile.InputStream;
        BinaryReader br = new BinaryReader(str);
        Byte[] size = br.ReadBytes((int) str.Length);
        using (SqlConnection con = new SqlConnection(Connstring))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "insert into Gtrans(Name, ContentType, DocFileText) values(@Name, @ContentType, @DocFileText)";
                cmd.Parameters.AddWithValue("@Name", filename);
                cmd.Parameters.AddWithValue("@ContentType", "application/word");
                cmd.Parameters.AddWithValue("@DocFileText", size);
                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();

            }
        }

1 个答案:

答案 0 :(得分:0)

好的,你的方法存在两个问题。

第1点(如果您使用的是winforms):

如果您想将rtf文本加载到RichTextBox,则必须使用Rtf的{​​{1}}属性。不是RichTextBox属性。 See this for more information

第2点:

只需将.doc字符串传递给rtf,就无法在rtf中打开Text.doc是其他rtf。

好消息:有可能,坏:你需要MS Word。

  • 添加对“Microsoft Word 15.0对象库”的引用位于引用窗口的“Com”部分下

  • 使用此代码将.doc文件转换为doc文件

rtf

source

重要

  • 使用相同的byte[] yourDocData = null; // in your case (byte[])sqlRead["DocFileText"] // Save your data as file so word can read it var tmpFile = Path.GetTempFileName(); using (var fileStream = new FileStream(tmpFile, FileMode.Append, FileAccess.Write)) using (var writer = new BinaryWriter(fileStream)) { writer.Write(yourDocData); } // Convert .doc to .rtf var newWordFile = (object) tmpFile; var newRtfFile = (object) Path.GetTempFileName(); var wordObject = new Microsoft.Office.Interop.Word.Application(); var docs = wordObject.Documents.Open(ref newWordFile); docs.SaveAs(ref newRtfFile, WdSaveFormat.wdFormatRTF); // This is your rtf code var yourRtfCode = File.ReadAllText(newRtfFile.ToString()); // Dispose docs.Close(); wordObject.Quit(); 来保存/加载数据库中的.doc!
  • Encoding设置为您的控件的yourRtfCode - 属性,但设置为接受text的属性 - 文字
相关问题