none
代码读取Access中手工插入的OLE对象 RRS feed

  • 问题

  • 请大内高手帮忙解惑!感激不尽…………

    问题1、请问如何通过代码读取Access中手工插入的OLE对象?

            Access中手工插入的OLE对象貌似与用代码插入的OLE对象不一样,同一份“.doc”文件用手工插入时名称显示为“microsoft 97-2003 文档”,而代码插入时则是“长二进制文件”!

            所说是当手工插入OLE对象时Access会自动添加一些附加的信息,那请问该如何才能通过代码读取该类对象???

    问题2、另外,我在用下面代码(下面是web网站的后台文档,功能:下载前台gridview中access的OLE对象.doc文档)进行尝试时,下载后的文件竟然是该网站的页面文件(.aspx),请问这是不是因为问题1中的原因引起?

            DataTable myDT = Session["myDTPrjDoc"] as DataTable;
            byte[] btDoc = (byte[])myDT.Rows[0]["文档内容"];
            string sFileName = myDT.Rows[0]["文档内容"].ToString();
                Response.Clear();
                Response.ClearHeaders();
                Response.Buffer = false;
                Response.ContentType = "application/msword";
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(sFileName) + ".doc"); //把 attachment 改为 online 则在线打开
                Response.BinaryWrite(btDoc);
                Response.Flush();
                Response.Close();
                Response.End();

    问题3、Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(sFileName) + ".doc"); 这句代码中Server.UrlEncode(sFileName)是为了解决sFileName包含中文时出现乱码的问题,但是在此句后面一定得加上".doc"类似的后缀名才行,否则依然会出现中文乱码的问题!

    2010年9月5日 0:46

答案

  • 你好:

    你可以尝试将那些二进制代码转换成OLE对象。

    你下载失败有可能是没有读取到相关文件,或没有下载的权限。

    添加后缀名应该不是为了防止中文乱码。你可以尝试添加如下代码来防止。

    context.Response.Charset = "GB2312";

    context.Response.ContentEncoding = System.Text.Encoding.UTF8;

    希望对你有所帮助。

    2010年9月8日 5:36
    版主

全部回复

  • 你好:

    你可以尝试将那些二进制代码转换成OLE对象。

    你下载失败有可能是没有读取到相关文件,或没有下载的权限。

    添加后缀名应该不是为了防止中文乱码。你可以尝试添加如下代码来防止。

    context.Response.Charset = "GB2312";

    context.Response.ContentEncoding = System.Text.Encoding.UTF8;

    希望对你有所帮助。

    2010年9月8日 5:36
    版主
  • 做个标记!学习一下
    2010年9月9日 0:23