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编程环境中,主从表(Master-Detail)是一种常见的数据展示方式,它用于处理一对多的关系,例如一个订单可以...通过实践这个实例,开发者不仅可以提升Delphi编程技巧,还能深入理解数据库应用开发的关键环节。
cxGrid允许开发者在应用程序中构建主从表结构,这种结构通常用于显示和操作多层关联的数据。在本例中,我们将深入探讨如何从cxGrid组件中导出主从表记录,并获取从表的记录数。 首先,cxGrid的主表通常用于展示主要...
利用TClientDataSet制作主从表是数据库应用设计中的常见方法,可以有效地管理和展示关联数据,类似于Access或SQL Server中的关系模型。下面我们将详细介绍如何使用Delphi的内存表来实现这一功能。 首先,了解主从表...
在.NET框架中,C#是一种...这个过程涉及到数据库连接、数据查询、事件处理、数据绑定等多个方面的知识,是Windows桌面应用开发中的一个重要技能。在实践中,你可能还需要结合具体的业务需求,对代码进行调整和定制。
WinForm+Access主从表单据设计保存主表出错
Delphi作为一个强大的RAD(快速应用程序开发)工具,提供了丰富的组件和库来简化数据库交互,其中包括对主从表(Master-Detail)的支持。主从表是一种数据组织方式,通常用于展示一对多的关系,如订单与订单详情、...
总结起来,这个示例将教给我们如何在C#的Windows应用程序中利用`DataGridView`展示主从表关系数据,通过用户交互动态更新从表数据,这对于理解和处理复杂数据关系的开发是非常重要的。在学习和实践中,务必注意代码...
通过DataGridView简单应用,实现主从表数据行折叠展开,数据源行结构只要具有主从关系就行。详见代码中描述
在IT领域,尤其是在开发带有数据展示功能的软件应用时,组件如cxGrid是常见的用于创建主从表结构的工具。cxGrid是一款强大的Windows Forms控件,由Devart公司开发,适用于Visual Studio,它允许程序员创建复杂的网格...
在DevExpress的.NET开发工具集中,GridControl是一款强大的数据呈现控件,它提供了丰富的功能和高度定制性,使得在Windows Forms应用程序中实现主从表关系变得简单。主从表(Master-Detail)是一种常见的数据展示...
在IT行业中,主从表(Master-Detail)关系是一种常见的数据表示方式,特别是在数据库设计和Web应用程序开发中。本项目“Repeater实现主从表浏览”利用Visual Studio 2008(VS2008)和Northwind数据库,为我们展示了...
在IT领域,Silverlight是一种由微软开发的富互联网应用程序(RIA)平台,它允许开发者创建交互性强、用户体验丰富的Web应用。在本主题中,我们主要关注如何在Silverlight中使用主从表信息来显示数据,这通常涉及到...
3. **定义DataRelation**:在DataSet中,我们可以使用DataRelation类来定义主从表之间的关系。DataRelation对象需要指定父表(主表)、子表(从表)以及连接它们的列。 4. **填充数据**:使用SqlCommand对象执行SQL...
在数据库应用开发中,主从表关系是一种常见的数据组织方式,主表通常存储关键信息,而从表则关联主表的某个字段,用于扩展主表的数据。`fastrepart`是一个可能的工具或方法,用于高效地处理这种关系。在这个场景下,...
一、使用视图meeting将多表关联整合在一起 二、通过Sql语句筛选数据 三、建立和主从表的关联 四、注意在CrystalReport1表中插入子报表的时候,一定要将主从表的关联字段设置好,否则出乱子
在ASP.NET开发中,"GridView无刷新主从表联动"是一种常见的数据展示方式,它能够提升用户体验,使得用户在查看和操作数据时无需等待页面完全刷新。这种技术通常用于显示两个相关联的数据表,其中一个是主表,另一个...
在.NET MVC框架中,开发一个主从表浏览的界面是一个常见的需求,这通常涉及到数据的层级展示和交互。本项目“嵌套Repeater实现主从表浏览(MVC)...通过理解和实践这些知识点,开发者可以更好地掌握Web应用开发的技巧。
DBGRIDEH 表中表 主表下拉明细表 主从表,选择一行记录,点击第一个单元格十字符号即可查询对应的明细表格。附源码!表格类型在实际使用中实用! 注意:数据库需自己按照实际情况配置一下, 应用的数据库控件 :...
Entity Framework(EF)是Microsoft开发的一个对象关系映射(ORM)框架,用于.NET应用程序,它允许开发者使用面向对象的编程语言来操作数据库,无需关注底层的SQL语句。在数据库领域,主从表是一个常见的概念,主表...
在.NET开发环境中,DevExpress是一款强大的UI控件集,它提供了丰富的功能来构建高效、美观的桌面和Web应用程序。本主题将深入探讨如何使用DevExpress控件实现主从表(Master-Detail)关系,这是一种常见的数据展示...