dzqlhh 发表于 2013-1-29 13:12:35

主从表的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>
<span style="font-size: 10pt;">
页: [1]
查看完整版本: 主从表的Ajax应用开发举例(第三页)