MVC中的Ajax与增删改查(二)

上一篇记录的是前台操作,下面写一下后台 ,本来自认为是没有必要做补充,毕竟思路啥的都有,实际上在做删除操作的时候,折腾了一天,还是自己太嫩,逻辑不够严谨,这里作下记录。

关于表结构这里再作下说明:

①表A是三个联合主键,key1,key2,...

②表B是四个联合主键 key1,key2,key3,...

③A表主键是B表外键

④A,B表的某个栏位的描述信息都来自语言表C

⑤C表联合主键(TableName,TableKey,Language,Desc,...)

⑥如果记录A表描述信息: TableKey为(key1,key2)

删除从表B 时,需要删除B+C  将SQL拼接在一起,删除失败立即回滚

//刪除
public bool Delete_Detail(List<string> keyList)
{
  try
  {
    string strall = "";
    //循環刪除數據
    for (int i = 0; i < keyList.Count; i++)
    {
      //刪除B表
      string strsqlb = @" DELETE FROM B WHERE key1=‘" + keyList[i].Split(‘,‘)[0] + "‘ AND  key2=‘" + keyList[i].Split(‘,‘)[1] + "‘ AND key3=‘" + keyList[i].Split(‘,‘)[2] + "‘ ";
      //刪除C表
      string strsqlc = @" DELETE  FROM C WHERE TableName =‘B‘ AND TableKey=‘" + keyList[i] + "‘ ";

      strall += (strsqlb + strsqlc);

    }
    //調用事務
    return base.ExecuteNonQueryWithTran(strall) > 0;
  }
  catch (Exception ex)
  {
    return false;
  }
}

同理,在删除A表时,就需要多做一点处理,试想,因为涉及主外键关系,当删除多笔A表中数据时,可能其中的一笔或者多笔在从表B中存在,这时,就要提前删除B,如果采用SQL 拼接的话,执行事务时,由于外键的原因,中途会因为约束而中断。所以正常逻辑是: 先判断B表是否存在,不存在忽略,存在则立即删除

 //刪除
 public bool Delete_A(List<string> keyList)
 {
      try
      {
            //循環刪除數據
          string strall = "";
          for (int i = 0; i < keyList.Count; i++)
          {
             bool b = IsExistB(keyList[i].Split(‘,‘)[0], keyList[i].Split(‘,‘)[1],"");
             if (b)
             {
                //刪除從表 B
                string strsqlb = @" DELETE FROM  B WHERE key1=‘" + keyList[i].Split(‘,‘)[0] + "‘ AND  key2=‘" + keyList[i].Split(‘,‘)[1] + "‘ ";
                base.ExecuteNonQuery(strsqlb);
             }
             //刪除主表 A
             string strsqla = @" DELETE FROM  A WHERE key1=‘" + keyList[i].Split(‘,‘)[0] + "‘ AND  key2=‘" + keyList[i].Split(‘,‘)[1] + "‘ ";
             //刪除語言表 C
             string strsqlc = @" DELETE  FROM C WHERE TableName= ‘A‘ AND TableKey in(‘" + keyList[i] + "‘) ";

             strall += (strsqla + strsqlc);
          }
          //調用事務
          return base.ExecuteNonQueryWithTran(strall) > 0;
      }
      catch (Exception ex)
      {
          return false;
       }
}

以上是关于删除逻辑,此外新增这里,同理,每当新增一笔A/B记录时,都要在C表做对应的新增操作

新增A: 判断A表是否存在此记录,如果存在,返回no;不存在,执行新增A、C操作

新增B亦是如此

之前是按照这种思路做操作,如果存在这种情况:A不存在,C存在(毕竟C没有外键约束)

此时就要对C进行一个操作,直接删除C表对应描述,而无需判断是否存在,C存在则本应该删除(无效数据),C不存在,执行删除也不影响数据

补充后的思路:

判断A表是否存在此记录,如果存在,返回no;不存在,删除C,执行新增A、C操作

时间: 2024-08-04 13:34:19

MVC中的Ajax与增删改查(二)的相关文章

在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计

在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今天的阳光真特么好,写完本篇,好出去在阳光下溜溜狗.散散步什么的,正所谓文武之道一张一弛,走神了,进入正题. 首先是一个View Model,在这里定义验证规则,提交和保存数据的时候还必须和领域模型映射. using System; using System.ComponentModel.DataAnnotat

vue实战(一):利用vue与ajax实现增删改查

vue实战(一):利用vue与ajax实现增删改查: <%@ page pageEncoding="UTF-8" language="java" %> <%@ include file="../commons/taglib.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.

android中SQLite数据库的增删改查

1.数据库帮助类PersonSQLiteOpenHelper package com.wzw.sqllitedemo.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper

asp.net中利用JSON进行增删改查中运用到的方法

//asp.net中 利用JSON进行操作, //增加: //当点击"增加链接的时候",弹出增加信息窗口,然后,在窗体中输入完整信息,点击提交按钮. //这里我们需要考虑这些:我会进行异步提交,使用jquery中的方法,$.post("网页名",JSON,callback); //JSON的写法:{"name":name,"id":id},那我们对其进行假设,比方说,表单中的textbox很多,需要我们填写的信息 //也很多,

用CI框架向数据库中实现简单的增删改查

以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html CodeIgniter_2.1.3与PHP5.6的兼容问题请戳 http://www.cnblogs.com/corvoh/p/4649357.html 增: //insert//语法:$bool=$this->db->insert('表名',关联数组); $data=array( 'username'=

用PHP向数据库中实现简单的增删改查(纯代码,待完善)

<?php $con = mysql_connect("localhost:3306","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("test", $con); $result = mysql_query("SELECT * FROM user"); echo "

一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字段的删除过程中需不需要对数据进行备份 ''' 二.路由基础 ''' # url中含有四个参数 # url(regex, view, kwargs=None, name=None) # 正则路径 视图函数地址 默认关键字参数(了解) 路由别名 # r'index' 只要请求中含有index都可以匹配成

asp.net下利用MVC模式实现Extjs表格增删改查

在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象负责在数据库中存取数据. View(视图) 是应用程序中处理数据显示的部分.通常视图是依据模型

MVC学习-用EF做增删改查

在DbContext中有两个很重要的方法: 一.几个方法的说明 1.一个是Entry()方法: public DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class; 可以将 任何类型的数据放入到上下文对象中 DbEntityEntry有个 属性EntityState,它可以为上下文中的对象做标识,并依照标识的值做相应的sql操作 public enum EntityState { De