主从表的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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值