基于Asp.Net 2.0(C#)和SQL Server 2005使用DSOFramer全攻略

昨天开始研究DSOFramer基于Asp.Net 2.0和SQL Server 2005的使用方法,百试不灵,aoao不爽,
已至深夜,遂混混然一觉天亮,今晨,灵感突发,渐入佳境,不觉间代码已成。

本人菜鸟一名,虽所悟不多,终不敢独藏,
于众入门兄弟有萤火之助,吾心亦慰,
错漏百出,贻笑大方,欢迎拍转(红砖就行,别上青砖,容易被拍死),呵呵……

不扯犊子了,开整!

一、先注册一下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 οnlοad="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="保存" οnclick="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文档了。

 

不过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!");
        }
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET 2.0+SQL Server 2005全程指南 目录 基础篇 第1章 ASP.NET概述及环境配置 1.1 认识ASRNET 1.1.1 .NET Framework框架 1.1.2 ASP.NET功能与特性 1.1.3 ASP.NET与ASP的区别 1.2 搭建ASP.NET开发环境 1.2.1 安装与配置IIS 1.2.2 安装与配置Visual Studi0.NET 2005 1.3 常用功能窗口介绍 1.3.1 主窗口 1.3.2 文档窗口 1.3.3 工具箱窗口 1.3.4 属性窗口 1.3.5 解决方案资源管理器窗口 1.3.6 错误窗口 1.4 第一个ASENET程序 1.5 本章小结 第2章 C#程序设计基础 2.1 C#语言简介 2.2 C#中的数据类型 2.2.1 值类型 2.2.2 引用类型 2.2.3 装箱和拆箱 2.3 C#语言中的变量和常量 2.3.1 变量 2.3.2 常量 2.4 C#语言中的操作符和表达式 2.4.1 赋值运算符 2.4.2 算术运算符 2.4.3 比较(关系)运算符 2.4.4 逻辑运算符 2.4.5 位运算符 2.5 C#语言中的控制语句 2.5.1 选择语句 2.5.2 循环语句 2.6 异常处理 2.6.1 用trycatch捕获异常 2.6.2 用tryfinally清除异常 2.6.3 用trycatchfinally处理所有的异常 2.7 面向对象程序设计 2.7.1 成员 2.7.2 类的可访问性 2.7.3 构造函数和析构函数 2.7.4 封装 2.7.5 继承 2.7.6 多态 2.8 C#样语言高级特性 2.8.1 接口 2.8.2 事件 2.8.3 预处理指令 2.8.4 反射 2.8.5 线程 2.9 本章小结 进阶篇 第3章 ASP.NET 2.0常用服务器控件 3.1 使用基本控件 3.1.1 TextBox控件的应用 3.1.2 Label控件的应用 3.1.3 DropDownList和ListBox控件应用 3.1.4 CheckBOX和CheckBoxList控件应用 3.1.5 RadioButton和RadioButtonList控件应用 3.2 ASP.NET 2.0新增控件 3.2.1 BulletedList控件的应用 3.2.2 Substitution控件的应用 3.2.3 Wizard控件的应用 3.2.4 MultiView和View控件的应用 3.2.5 FileUpload控件的应用 3.3 其他常用控件 3.3.1 Calendar控件的应用 3.3.2 AdRotator控件的应用 3.3.3 Xml控件的应用  3.4 本章小结 第4章 验证控件 4.1 非空验证 4.2 范围验证 4.3 比较验证 4.4 使用正则表达式验证 4.5 自定义验证 4.6 本章小结 第5章 ASP.NET 2.0对象、状态和配置 5.1 Response对象和Request对象 5.1.1 Response对象 5.1.2 Request对象 5.2 HTTP请求上下文 5.2.1 应用程序状态 5.2.2 Server对象 5.2.3 使用Server对象中Execute()和Transfer()方法重定向页面 5.2.4 Global.asax文件 5.3 状态管理 5.3.1 Application对象 5.3.2 Session对象 5.3.3 Cookie对象 5.3.4 ViewState对象 5.4 配置ASP.NET应用程序 5.4.1 Web.config文件概述 5.4.2 配置数据库链接字符串 5.4.3 添加自定义Web.Config文件配置节 5.4.4 对Web.Config文件进行读写操作 5.4.5 加密和解密Web.Config文件的配置节 5.4.6 ASP.NET网站管理工具 5.4.7 ASP.NET MMC管理单元 5.5 本章小结 第6章 数据源控件 6.1 SqlDataSource数据源控件 6.2 AccessDataSource数据源控件 6.3 XmlDataSource数据源控件 6.4 SiteMapDataSource数据源控件 6.5 0bjectDataSource数据源控件 6.6 本章小结 第7章 SQL Server 2005常用操作 7.1 SQL Server 2005 7.1.1 SQL Server 2005概述 7.1.2 安装SQL Server 2005数据库 7.1.3 连接数据库服务器 7.1.4 修改登录方式 7.2 管理数据库的基本对象 7.2.1 创建数据库 7.2.2 备份数据库 7.2.3 还原数据库 7.2.4 附加数据库 7.2.5 删除数据库 7.2.6 创建和修改袁 7.2.7 删除袁 7.3 SQL常用语句 7.3.1 获取指定条件的记录 7.3.2 获取指定数量的记录 7.3.3 对记录进行排序 7.3.4 模糊查询 7.3.5 对数据进行分组统计 7.3.6 嵌套查询 7.3.7 插入记录并返回ID 7.3.8 同时更新多条记录 7.3.9 根据条件删除记录 7.4 存储过程 7.4.1 使用存储过程添加数据 7.4.2 使用存储过程查询数据 7.4.3 使用存储过程更新数据 7.4.4 使用存储过程删除数据 7.4.5 存储过程与输出参数 7.5 本章小结 第8章 ADO.NET编程基础 8.1 AD0.NET的基本对象及其操作 8.1.1 Connection对象(连接数据库) 8.1.2 Command对象 8.1.3 DataReader对象 8.1.4 DataAdapter和DataSet对象 8.1.5 使用DataView过滤数据 8.1.6 动态创建DataTable对象 8.2 数据绑定 8.2.1 简单数据绑定 8.2.2 复杂数据绑定 8.2.3 Eval0方法和Bind()方法绑定数据 8.3 本章小结 第9章 GridView及其他数据控件的应用 9.1 GridView控件的应用 9.1.1 GridView控件的概述 9.1.2 使用GridView控件的绑定列绑定数据 9.1.3 使用GridView控件的模板列绑定数据 9.1.4 使用GridView控件编辑并删除数据 9.1.5 使用GridView控件分页显示数据 9.1.6 对GridView控件中的数据进行排序 9.2 其他数据控件的应用 9.2.1 使用Repeater控件显示数据 9.2.2 在Repeater控件中分页显示数据 9.2.3 使用DetailsView控件操作一条记录 9.2.4 使用FormView控件更新和插入数据 9.3 本章小结 高级篇 第10章 导航与登录 10.1 站点导航 10.1.1 Menu控件 10.I.2 SiteMapPath控件 10.1.3 TreeView控件 10.2 站点登录 10.2.1 创建新用户 10.2.2 用户登录 10.3 本章小结 第11章 母版页 11.1 母版页概述 11.1.1 母版页的基础知识 11.1.2 母版页运行机制 11.2 创建母版页 11.3 创建内容页 11.4 本章小结 第12章 WebPart部件 12.1 WebPart基础知识 12.1.1 WebPart部件概述 12.1.2 W曲部件具体应用 12.1.3 Web部件基本控件 12.2 创建WebPart控件 12.2.1 WebPartManager控件 12.2.2 WebPart和WebPartZone控件简介 12.3 编辑WebPart控件 12.3.1 EditorZone控件简介 12.3.2 AppearanceEditorPart控件简介 12.3.3 BehaviorEditorPart控件简介 12.3.4 LayoutEditorPart控件简介 12.3.5 PropertyGridEditorPart控件简介 12.3.6 实现编辑WebPart控件 12.4 管理WebPart控件 12.4.1 CatalogZone控件简介 12.4.2 DeclarativeCatalogPart控件简介 12.4.3 PageCatalogPart控件简介 12.4.4 ImportCatalogPart控件简介 12.5 W曲部件个性化设置概述 12.5.1 个性化设置的工作方式 12.5.2 个性化设置和其他ASENET功能 12.6 本章小结 第13章 高级数据处理 13.1 文件处理 13.1.1 访问目录和文件 13.1.2 写入数据 13.1.3 上传文件 13.1.4 下载文件 13.2 XML操作 13.2.1 创建XML文件 13.2.2 写入XML文件 13.2.3 读取XML文件 13.3 其他数据处理 13.3.1 读取注册表信息 13.3.2 获取文件信息 13.4 本章小结 第14章 ASP.NET AJAX相关技术简介 14.1 Ajax概述 14.1.1 什么是Ajax 14.1.2 Ajax的工作原理 14.1.3 Ajax的优势与不足 14.2 ASP.NET AJAX 14.2.1 ASENET AJAX的特性 14.2.2 ASENET AJAX的安装 14.3 ASENET AJAX控件 14.3.1 ScriptManager控件 14.3.2 ScriptManagerProxy控件 14.3.3 UpdatePanel控件 14.3.4 UpdateProgress控件 14.3.5 Timer控件 14.4 本章小结 实践篇 第15章 个人网站初学者工具包 15.1 个人网站初学者工具包概述及创建 15.2 系统通用类及配置文件 15.2.1 配置文件(Web.Config) 15.2.2 存储过程设计 15.2.3 系统通用类设计 15.3 母版页设计 15.4 系统实现 15.4.1 系统主页 15.4.2 用户注册 15.4.3 用户登录 15.4.4 浏览相册 15.4.5 下载照片 15.5 后台管理 15.5.1 创建相册 15.5.2 编辑和删除相册 15.5.3 添加照片 15.5.4 编辑和删除照片 15.6 本章小结 第16章 办公自动化系统 16.1 系统总体设计 16.1.1 系统功能描述 16.1.2 系统架构设计 16.2 系统模块设计 16.2.1 系统功能模块划分 16.2.2 功能模块设计 16.3 数据库设计 16.3.1 数据库表之间的关系 16.3.2 数据库表结构的详细设计 16.4 数据库操作类的设计 16.5 用户登录和注册 16.5.1 用户登录 16.5.2 用户注册 16.6 用户管理及角色管理 16.6.1 用户管理 16.6.2 角色管理 16.7 用户考勤及设置 16.7.1 用户考勤 16.7.2 考勤设置 16.8 站内短信 16.8.1 发送站内短信 16.8.2 收件箱 16.8.3 发件箱 16.9 请假信息管理 16.9.1 填写请假表单 16.9.2 查看审批进度 16.9.3 审批请假信息 16.10 我的通讯录 16.10.1 添加通信记录 16.10.2 查看和编辑通讯录 16.10.3 编辑和删除通讯录分类信息 16.11 部门及职位管理 16.11.1 添加部门 16.11.2 部门管理 16.11.3 添加职位 16.11.4 职位管理 16.12 我的文档管理 16.12.1 上传文档 16.12.2 文档下载 16.12.3 文档管理 16.13 公文流转 16.13.1 新建公文流转 16.13.2 查收公文文件 16.14 本章小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值