`
dzqlhh
  • 浏览: 61146 次
社区版块
存档分类
最新评论

主从表的Ajax应用开发举例(第三页)

阅读更多

MsaterDetail_Update.aspx.cs文件主要用于将前端页面的增删改操作产生的xml消息解析成对应的sql语句,并且执行之。<o:p></o:p>

该页的代码及注释如下:<o:p></o:p>

/**<o:p></o:p>

* <p>Title: DBUpdate</p><o:p></o:p>

 * <p>Description:To update the data to the database as demand </p><o:p></o:p>

 * <p>Copyright: Copyright (c) </p><o:p></o:p>

 * <p>Company:joyistar </p><o:p></o:p>

 * @author:pxy<o:p></o:p>

 * @version<o:p></o:p>

 */<o:p></o:p>

using System;<o:p></o:p>

using System.Data;<o:p></o:p>

using System.Data.OleDb;<o:p></o:p>

using System.Configuration;<o:p></o:p>

using System.Collections;<o:p></o:p>

using System.Web;<o:p></o:p>

using System.Web.Security;<o:p></o:p>

using System.Web.UI;<o:p></o:p>

using System.Web.UI.WebControls;<o:p></o:p>

using System.Web.UI.WebControls.WebParts;<o:p></o:p>

using System.Web.UI.HtmlControls;<o:p></o:p>

using joyistar.eip.util;<o:p></o:p>

using joyistar.eip.vo;<o:p></o:p>

<o:p> </o:p>

public partial class MasterDetail_Update : System.Web.UI.Page<o:p></o:p>

{<o:p></o:p>

    private String connString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source="+System.Web.HttpContext.Current.Server.MapPath(".")+"demo.mdb";<o:p></o:p>

    protected void Page_Load(object sender, EventArgs e)<o:p></o:p>

    {<o:p></o:p>

        Response.ContentType = "text/xml";<o:p></o:p>

        String xml = HttpParser.getXML(Request.InputStream);//http请求转换为xml<o:p></o:p>

        XmlPost xmlPost = new XmlPost();  //构造一个XmlPost<o:p></o:p>

        String acttype = null;//动作类型,通常有old,insert,delete等值,表示前段操作的类型是增,,还是改,以方便后面构造sql语句.<o:p></o:p>

        XmlAction action = null;//定义了一个动作对象action<o:p></o:p>

        String sql = null;<o:p></o:p>

        String where = null;<o:p></o:p>

        OleDbConnection conn = null;<o:p></o:p>

        String old_item_id = null;<o:p></o:p>

        String new_item_id = null;<o:p></o:p>

        try<o:p></o:p>

        {<o:p></o:p>

            xmlPost.Open(xml);//格式化xml<o:p></o:p>

            conn = new OleDbConnection(connString);<o:p></o:p>

            conn.Open();<o:p></o:p>

            OleDbCommand oledbCommand = new OleDbCommand();<o:p></o:p>

            oledbCommand.Connection = conn;<o:p></o:p>

            for (int i = 0; i < xmlPost.Actions.Count; i++)//这个循环用于遍历所有的动作.<o:p></o:p>

            {<o:p></o:p>

               <o:p></o:p>

                action  = xmlPost.GetAction(i); //取得某一个操作的action对象,其中QueryName属性用来表示当前的操作来自于那一个DataSet,ActionType属性用来表示操作的类型。<o:p></o:p>

                acttype  = action.ActionType;<o:p></o:p>

             //judges which table to be update<o:p></o:p>

                if (action.QueryName.Equals("DataSet1")) //判断这个动作是否来自于DataSet1<o:p></o:p>

                {<o:p></o:p>

                    if (acttype.Equals("old"))//动作类型为old表示操作有更新和删除两种可能,下一步再具体判断. <o:p></o:p>

                    {<o:p></o:p>

                        where       = " where ";<o:p></o:p>

                        where       = where + "SALE_ID=" + action.getField("SALE_ID").Value ;<o:p></o:p>

                        old_item_id = action.getField("SALE_ID").Value;<o:p></o:p>

                    }<o:p></o:p>

                    if (acttype.Equals("update"))//判断动作是否为更新<o:p></o:p>

<o:p> </o:p>

                    {<o:p></o:p>

                        String set = " set ";<o:p></o:p>

                        <o:p></o:p>

                        //更新的 sql语句<o:p></o:p>

                                                        for (int j = 0; j < action.FieldCount; j++)<o:p></o:p>

                                                        {<o:p></o:p>

                            if (action.getField(j).Name.Equals("SALE_ID"))<o:p></o:p>

                            {<o:p></o:p>

                                set = set + action.getField(j).Name + "=" + action.getField(j).Value;<o:p></o:p>

                                new_item_id = action.getField(j).Value.ToString();//取得当前行修改后的的主键值<o:p></o:p>

                            }<o:p></o:p>

                                                                  else if(action.getField(j).Name.Equals("SALE_DATE"))//对输入的时间值进行格式化<o:p></o:p>

                            {<o:p></o:p>

                                                                           DateTime theDate = xmlPost.timeToDateTime(action.getField(j).Value);<o:p></o:p>

                                set = set + action.getField(j).Name + "=#" + theDate.ToString("yyyy-M-d HH:mm:ss") + "#";<o:p></o:p>

                            }<o:p></o:p>

                                                                  else <o:p></o:p>

                            {<o:p></o:p>

                                set = set + action.getField(j).Name + "='" + action.getField(j).Value + "'";<o:p></o:p>

                            }<o:p></o:p>

                                                                  if (j < action.FieldCount - 1)<o:p></o:p>

                            {<o:p></o:p>

                                set = set + ",";<o:p></o:p>

                            }<o:p></o:p>

                                                        }<o:p></o:p>

                        sql = "update sale" + set + where;<o:p></o:p>

                        oledbCommand.CommandText = sql;<o:p></o:p>

                        oledbCommand.ExecuteNonQuery();<o:p></o:p>

<o:p> </o:p>

                        //主表的主键值变化时,从表对应的主键也需要修改.<o:p></o:p>

                        if (new_item_id!=old_item_id && new_item_id != null)<o:p></o:p>

                        {<o:p></o:p>

                            sql = "update item set ITEM_ID=" + new_item_id + " where ITEM_ID=" + old_item_id ;<o:p></o:p>

                            oledbCommand.CommandText = sql;<o:p></o:p>

                            oledbCommand.ExecuteNonQuery();<o:p></o:p>

                        }<o:p></o:p>

<o:p> </o:p>

                    }<o:p></o:p>

                        //删除的sql语句<o:p></o:p>

                    if (acttype.Equals("delete"))<o:p></o:p>

                    {<o:p></o:p>

                        where = " where ";<o:p></o:p>

                        where = where + action.getField("SALE_ID").Name + "=" + action.getField("SALE_ID").Value + "";<o:p></o:p>

                        sql = "delete from sale" + where;<o:p></o:p>

                        oledbCommand.CommandText = sql;<o:p></o:p>

                        oledbCommand.ExecuteNonQuery();<o:p></o:p>

                    }   //插入的sql语句<o:p></o:p>

                    if (acttype.Equals("insert"))<o:p></o:p>

                    {<o:p></o:p>

                        String field = "";<o:p></o:p>

                        String value = "";<o:p></o:p>

                       for (int j = 0; j < action.FieldCount; j++)<o:p></o:p>

                        {<o:p></o:p>

                            field = field + action.getField(j).Name;<o:p></o:p>

                            if(action.getField(j).Name.Equals("SALE_ID")) <o:p></o:p>

                            {<o:p></o:p>

                                                                           value = value+action.getField(j).Value;<o:p></o:p>

                            }<o:p></o:p>

                                  else if(action.getField(j).Name.Equals("SALE_DATE")) <o:p></o:p>

                            {<o:p></o:p>

                                                                           DateTime theDate = xmlPost.timeToDateTime(action.getField(j).Value);<o:p></o:p>

                                value = value +"#" + theDate.ToString("yyyy-M-d HH:mm:ss") + "#";<o:p></o:p>

                            }<o:p></o:p>

                                                                  else {<o:p></o:p>

                                                                           value=value+"'"+action.getField(j).Value+"'";<o:p></o:p>

                            }<o:p></o:p>

                            if (j < action.FieldCount - 1)<o:p></o:p>

                            {<o:p></o:p>

                                field = field + ",";<o:p></o:p>

                                value = value + ",";<o:p></o:p>

                            }<o:p></o:p>

                        }<o:p></o:p>

                        sql = "insert into sale (" + field + ") values (" + value + ")";<o:p></o:p>

                        oledbCommand.CommandText = sql;<o:p></o:p>

                        oledbCommand.ExecuteNonQuery();<o:p></o:p>

<o:p> </o:p>

                     }<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

                }<o:p></o:p>

                <o:p></o:p>

                else if (action.QueryName.Equals("DataSet2"))//表示操作发生在DataSet2相关的那个Grid即从表的Grid<o:p></o:p>

                  <o:p></o:p>

                {<o:p></o:p>

                    if (acttype.Equals("old"))<o:p></o:p>

                    {<o:p></o:p>

                        //where <st1:city w:st="on"><st1:place w:st="on">acton</st1:place></st1:city>, then update or delete action after it;<o:p></o:p>

                        where = " where ";<o:p></o:p>

                        where = where + "ITEM_ID=" + action.getField("ITEM_ID").Value + " and ITEM_PRODUCT_ID='" + action.getField("ITEM_PRODUCT_ID").Value + "'";<o:p></o:p>

                    }<o:p></o:p>

                    if (acttype.Equals("update"))<o:p></o:p>

                    {<o:p></o:p>

                        String set = " set ";<o:p></o:p>

                        //Here is update sql<o:p></o:p>

                       for (int j = 0; j < action.FieldCount; j++)<o:p></o:p>

                        {<o:p></o:p>

                        if (!action.getField(j).Name.Equals("ITEM_PRODUCT_ID"))<o:p></o:p>

分享到:
评论

相关推荐

    Delphi主从表自创实例

    在Delphi编程环境中,主从表(Master-Detail)是一种常见的数据展示方式,它用于处理一对多的关系,例如一个订单可以...通过实践这个实例,开发者不仅可以提升Delphi编程技巧,还能深入理解数据库应用开发的关键环节。

    导出cxGrid主从表记录

    cxGrid允许开发者在应用程序中构建主从表结构,这种结构通常用于显示和操作多层关联的数据。在本例中,我们将深入探讨如何从cxGrid组件中导出主从表记录,并获取从表的记录数。 首先,cxGrid的主表通常用于展示主要...

    利用delphi中的内存表来制作主从表

    利用TClientDataSet制作主从表是数据库应用设计中的常见方法,可以有效地管理和展示关联数据,类似于Access或SQL Server中的关系模型。下面我们将详细介绍如何使用Delphi的内存表来实现这一功能。 首先,了解主从表...

    使用DataGridView控件实现主从表

    在.NET框架中,C#是一种...这个过程涉及到数据库连接、数据查询、事件处理、数据绑定等多个方面的知识,是Windows桌面应用开发中的一个重要技能。在实践中,你可能还需要结合具体的业务需求,对代码进行调整和定制。

    WinForm主从表单据设计

    WinForm+Access主从表单据设计保存主表出错

    DELPHI 主从表控制

    Delphi作为一个强大的RAD(快速应用程序开发)工具,提供了丰富的组件和库来简化数据库交互,其中包括对主从表(Master-Detail)的支持。主从表是一种数据组织方式,通常用于展示一对多的关系,如订单与订单详情、...

    C#中DataGridView主从表例子

    总结起来,这个示例将教给我们如何在C#的Windows应用程序中利用`DataGridView`展示主从表关系数据,通过用户交互动态更新从表数据,这对于理解和处理复杂数据关系的开发是非常重要的。在学习和实践中,务必注意代码...

    主从表折叠应用(DataGridView),图标可换

    通过DataGridView简单应用,实现主从表数据行折叠展开,数据源行结构只要具有主从关系就行。详见代码中描述

    cxGrid主从表从表二次新增记录不显示

    在IT领域,尤其是在开发带有数据展示功能的软件应用时,组件如cxGrid是常见的用于创建主从表结构的工具。cxGrid是一款强大的Windows Forms控件,由Devart公司开发,适用于Visual Studio,它允许程序员创建复杂的网格...

    DevExpress中GridControl 主从表如何实现

    在DevExpress的.NET开发工具集中,GridControl是一款强大的数据呈现控件,它提供了丰富的功能和高度定制性,使得在Windows Forms应用程序中实现主从表关系变得简单。主从表(Master-Detail)是一种常见的数据展示...

    Repeater 实现主从表浏览

    在IT行业中,主从表(Master-Detail)关系是一种常见的数据表示方式,特别是在数据库设计和Web应用程序开发中。本项目“Repeater实现主从表浏览”利用Visual Studio 2008(VS2008)和Northwind数据库,为我们展示了...

    silverlight使用主从表信息显示datagrid

    在IT领域,Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,它允许开发者创建交互性强、用户体验丰富的Web应用。在本主题中,我们主要关注如何在Silverlight中使用主从表信息来显示数据,这通常涉及到...

    简单学习主从表

    3. **定义DataRelation**:在DataSet中,我们可以使用DataRelation类来定义主从表之间的关系。DataRelation对象需要指定父表(主表)、子表(从表)以及连接它们的列。 4. **填充数据**:使用SqlCommand对象执行SQL...

    fastrepart实现主从表

    在数据库应用开发中,主从表关系是一种常见的数据组织方式,主表通常存储关键信息,而从表则关联主表的某个字段,用于扩展主表的数据。`fastrepart`是一个可能的工具或方法,用于高效地处理这种关系。在这个场景下,...

    主从表关联问题

    一、使用视图meeting将多表关联整合在一起 二、通过Sql语句筛选数据 三、建立和主从表的关联 四、注意在CrystalReport1表中插入子报表的时候,一定要将主从表的关联字段设置好,否则出乱子

    GridView无刷新主从表联动

    在ASP.NET开发中,"GridView无刷新主从表联动"是一种常见的数据展示方式,它能够提升用户体验,使得用户在查看和操作数据时无需等待页面完全刷新。这种技术通常用于显示两个相关联的数据表,其中一个是主表,另一个...

    嵌套 Repeater 实现主从表浏览(MVC)

    在.NET MVC框架中,开发一个主从表浏览的界面是一个常见的需求,这通常涉及到数据的层级展示和交互。本项目“嵌套Repeater实现主从表浏览(MVC)...通过理解和实践这些知识点,开发者可以更好地掌握Web应用开发的技巧。

    DBGRIDEH 表中表 主表下拉明细表 主从表

    DBGRIDEH 表中表 主表下拉明细表 主从表,选择一行记录,点击第一个单元格十字符号即可查询对应的明细表格。附源码!表格类型在实际使用中实用! 注意:数据库需自己按照实际情况配置一下, 应用的数据库控件 :...

    Entity Framework主从表使用

    Entity Framework(EF)是Microsoft开发的一个对象关系映射(ORM)框架,用于.NET应用程序,它允许开发者使用面向对象的编程语言来操作数据库,无需关注底层的SQL语句。在数据库领域,主从表是一个常见的概念,主表...

    devexpress主从表实现

    在.NET开发环境中,DevExpress是一款强大的UI控件集,它提供了丰富的功能来构建高效、美观的桌面和Web应用程序。本主题将深入探讨如何使用DevExpress控件实现主从表(Master-Detail)关系,这是一种常见的数据展示...

Global site tag (gtag.js) - Google Analytics