注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

水滴石穿

破浪是阵风!

 
 
 

日志

 
 

DSOFramer使用  

2008-04-07 20:22:59|  分类: 软件开发技术资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、先注册一下DSOFramer.ocx

    操作:将DSOFramer.ocx复制到C:\windows\system32目录下,

         开始->运行->regsvr32 DSOFramer.ocx , 系统会提示DSOFramer.ocx中的DllRegisterServer成功。

二、添加DSOFramer.ocx到你的项目中

    操作:先说明一下,我用VS 2005 ,其他VS版本可能操作会有不同,操作应该也类似自己试试,问题应该不大。

          在你要访问DSOFramer.ocx的目录上点选右键菜单中的“添加现有项”,找到DSOFramer.ocx,确定。

三、在网页中加载DSOFramer

     新建Office.aspx

    添加如下代码:

     <object id="MyOffice" name = "MyOffice" style="LEFT: 0px; WIDTH: 100%; TOP: 0px; HEIGHT: 100%"

    classid="clsid:00460182-9E5E-11D5-B7C8-B8269041DD57" codebase="dsoframer.ocx#version=2,2,0,0" >

    </object>

     [注]:VS 2005对语法的要求贼多,什么ID的值要用""括起来啦,<object>不能大写啦,……

           没什么大碍,但是很烦人,简直就是微软版的唐僧,我给大家提供的代码是修改过的,VS不会有哪些废话了。

     然后再body中加入onload事件的处理函数

                   <body onload="show_word();">

     再在<head></head>中间加入函数体

     <script language="javascript" type="text/javascript">

        <!--

        function show_word() {

                var str=window.location.search;

                var pos_start=str.indexOf("id")+3;

                if (pos_start == 2)

                return ;

       

                var id = "http://localhost/Getdc.aspx?id=" + str.substring(pos_start);

                document.all. MyOffice.Open( id,false, "Word.Document");

        }

        // -->

        </script>

四、编制Getdc.aspx.cs文件

      建立Getdc.aspx文件,VS会同时建立与之关联的Getdc.aspx.cs文件

      先加入命名空间

        using System.Data.SqlClient;

        using System.Data.SqlTypes;

      编辑Getdc.aspx.cs的Page_Load函数;

      protected void Page_Load(object sender, EventArgs e)

      {

        int pid = Convert.ToInt32(Request["id"]);

        SqlConnection myConnection = new SqlConnection("Data Source=\"localhost\";Initial Catalog=\"demo\";Persist Security Info=True;User ID=demo;Password=demo");//数据库的相关设置自己改吧,我就不废话了

        SqlCommand mycommand = myConnection.CreateCommand();

        myConnection.Open();

        mycommand.CommandText = "SELECT filedata " +

            " FROM Table_word WHERE (ID = " + pid.ToString() + ") ";//其中filedata的数据库类型是varbinary(MAX)

        SqlDataReader myReader = mycommand.ExecuteReader();

        myReader.Read();

        SqlBinary binaryStream = myReader.GetSqlBinary(0);

        myReader.Close();

        myConnection.Close();

        Response.BinaryWrite(binaryStream.Value);

    }

     至此,只要你指定的ID没问题,就应该可以加载Word文档了。

五、建立保存文档的按钮

        在Office.aspx中添加按钮

        <input id="Button1" type="submit" value="保存" onclick="return Submit_upload_onclick()" />

        再建立一个input

            <input type="file" name="File" id = "File"/>

        然后添加Submit_upload_onclick()函数:

        function Submit_upload_onclick() {

        var str=window.location.search;

        var pos_start=str.indexOf("id")+3;

        if (pos_start == 2)

        return ;

        document.all.MyOffice.HttpInit();

        document.all.MyOffice.HttpAddPostCurrFile("File", "");

        var id = "http://localhost/Savedc.aspx?id=" + str.substring(pos_start);

        document.all.MyOffice.HttpPost(id);

        }

六、编制Savedc.aspx.cs文件

      建立Savedc.aspx文件,VS会同时建立与之关联的Savedc.aspx.cs文件

      先加入命名空间

        using System.Data.SqlClient;

        using System.Data.SqlTypes;

      编辑Savedc.aspx.cs的Page_Load函数;

    protected void Page_Load(object sender, EventArgs e)

    {

        int pid = Convert.ToInt32(Request["id"]);

        Byte[] source_bin = Request.BinaryRead(Request.TotalBytes);

        //---------------------------------------------------------------------------------------

       int i, loop, again = -1, file_begin = -1;

         for (i = 0; i < Request.TotalBytes; i++)

        {

            if (source_bin[i] == 13)

                if (source_bin[i + 1] == 10)

                    break;

        }

        Byte[] MyHeader = new Byte[i];

        for (loop = 0; loop < i; loop++)

            MyHeader[loop] = source_bin[loop];

        for (i += 2; i < Request.TotalBytes; i++)

        {

            if (source_bin[i] == 13)

                if (source_bin[i + 1] == 10)

                    if (source_bin[i + 2] == 13)

                        if (source_bin[i + 3] == 10)

                            break;

        }

        file_begin = i + 4;

        for (i = file_begin; i < Request.TotalBytes; i++)

        {

            for (loop = 0; loop < MyHeader.Length; loop++)

                if (source_bin[i + loop] != MyHeader[loop])

                    break;

            if (loop >= MyHeader.Length)

            {

                break;

            }

        }

        Byte[] result = new Byte[i - file_begin];

        //这是个不得已的办法,用循环肯定会慢,但我不会其他方法

        //希望高手完善

        for (loop = file_begin; loop < i - file_begin; loop++)

            result[loop - file_begin] = source_bin[loop];

        //---------------------------------------------------------------------------------------

        //以上代码将word文档从二进制流中提取出来,存储在result[]中,方法虽笨,肯定好使

        //本人不懂VB,更不懂Java,

        //上面代码是我楞从梁无惧用VB写的无惧上传类V2.0里挑选有用的部分翻译成C#的,泪ing……

        //看看人家梁兄,多无私,给同行提供这么好的东东

        //我在网上找了N + 1天,就TM没找到C#版的,再泪ing……

        //现在提供给大家,希望我是最后一个为此郁闷的人

        SqlConnection myConnection = new SqlConnection("Data Source=\"localhost\";Initial Catalog=\"demo\";Persist Security Info=True;User ID=demo;Password=demo");//数据库的相关设置自己改吧

        SqlCommand mycommand = myConnection.CreateCommand();

        mycommand.CommandText = "UPDATE Table_word SET filedata = @myfiledata , b_finished = 1 WHERE (ID = @myID)";

        mycommand.Parameters.Add("@myfiledata", SqlDbType.VarBinary, 0, "filedata");

        mycommand.Parameters.Add("@myID", SqlDbType.Int, 4, "ID");

        SqlDataAdapter mydpt;

        DataSet myds = new DataSet();

        mydpt = new SqlDataAdapter("SELECT ID ,filedata , b_finished FROM Table_copy  WHERE (ID = " + Request["id"] + ")", myConnection);

        myConnection.Open();

        mydpt.UpdateCommand = mycommand;

        mydpt.Fill(myds);

        DataTable mydt = myds.Tables[0];

        DataRow myrow;

        myrow = mydt.Rows[0];

        myrow.BeginEdit();

        myrow["filedata"] = result;

        myrow.EndEdit();

        mydpt.Update(myds);

        myConnection.Close();/**/

          }

        至此,只要你指定的ID没问题,就应该可以保存Word文档了。

 

 

 

编辑Savedc.aspx.cs的Page_Load函数;

protected void Page_Load(object sender, EventArgs e)

------------------------------------------------------------------------------

果然是ASP的写法。不过c#里面不需要这样,C# 提供了这样的接口

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using System.Data.OleDb;

using System.IO;

public partial class upload : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        Response.Clear();

                //ID为文档的主键,如果ID不为空,则更新数据,否则新建一条记录

        string ID = Request.Params["ID"];

        string DocID,DocTitle,DocType;

        DocID = "test";

        DocTitle = "test";

        if(ID != null && ID !=""){

            DocID = Request.Params["DocID"];

            DocTitle = Request.Params["DocTitle"];

        }

        DocType = Request.Params["DocType"];

        if(DocType == "")

            DocType =  "doc";

        DocType = DocType.Substring(0, 3);

        if (Request.Files.Count > 0)

        {

                OleDbConnection objConnection;

   

                HttpPostedFile upPhoto = Request.Files[0];

                int upPhotoLength = upPhoto.ContentLength;

                byte[] PhotoArray = new Byte[upPhotoLength];

                Stream PhotoStream = upPhoto.InputStream;

                PhotoStream.Read(PhotoArray, 0, upPhotoLength); //这些编码是把文件转换成二进制的文件

                string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";

                strConnection += @"Data Source=" + this.Server.MapPath("des.mdb");

                objConnection = new OleDbConnection(strConnection);

                objConnection.Open();

                string strSql;

                if (ID != null && ID != "")

                {

                    strSql = "update Doc Set DocContent  = @FImage where id = " + ID;                 

                    OleDbCommand comd = new OleDbCommand(strSql, objConnection); //执行sql语句

                    comd.Parameters.Add("@FImage", OleDbType.Binary);

                    comd.Parameters["@FImage"].Value = PhotoArray;

                    comd.ExecuteNonQuery(); //执行查询   

                    

                }

                else

                {

                    strSql = "Insert into Doc(DocID,DocTitle,DocType,DocContent) values(@DocId,@DocTitle,@DocType,@FImage)";

                    OleDbCommand comd = new OleDbCommand(strSql, objConnection); //执行sql语句

                    if(DocID != "")

                        comd.Parameters.Add("@DocId", OleDbType.VarChar, 20).Value = DocID;  //定义参数同时给它赋值

                    if (DocTitle != "")

                        comd.Parameters.Add("@DocTitle", OleDbType.VarChar, 50).Value = DocTitle;

                    comd.Parameters.Add("@DocType", OleDbType.VarChar, 10).Value = DocType;

                    comd.Parameters.Add("@FImage", OleDbType.Binary);

                    comd.Parameters["@FImage"].Value = PhotoArray;

                    comd.ExecuteNonQuery(); //执行查询

                }

                objConnection.Close();  //关闭数据库

                Response.Write("OK");

                Response.End();

            //-------------------------------------------

        }else{

            Response.Write("No File Upload!");

        }

    }

}

  评论这张
 
阅读(584)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017