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 = ; i < keyList.Count; i++)
{
//刪除B表
string strsqlb = @" DELETE FROM B WHERE key1='" + keyList[i].Split(',')[] + "' AND key2='" + keyList[i].Split(',')[] + "' AND key3='" + keyList[i].Split(',')[] + "' ";
//刪除C表
string strsqlc = @" DELETE FROM C WHERE TableName ='B' AND TableKey='" + keyList[i] + "' "; strall += (strsqlb + strsqlc); }
//調用事務
return base.ExecuteNonQueryWithTran(strall) > ;
}
catch (Exception ex)
{
return false;
}
}
同理,在删除A表时,就需要多做一点处理,试想,因为涉及主外键关系,当删除多笔A表中数据时,可能其中的一笔或者多笔在从表B中存在,这时,就要提前删除B,如果采用SQL 拼接的话,执行事务时,由于外键的原因,中途会因为约束而中断。所以正常逻辑是: 先判断B表是否存在,不存在忽略,存在则立即删除
//刪除
public bool Delete_A(List<string> keyList)
{
try
{
//循環刪除數據
string strall = "";
for (int i = ; i < keyList.Count; i++)
{
bool b = IsExistB(keyList[i].Split(',')[], keyList[i].Split(',')[],"");
if (b)
{
//刪除從表 B
string strsqlb = @" DELETE FROM B WHERE key1='" + keyList[i].Split(',')[] + "' AND key2='" + keyList[i].Split(',')[] + "' ";
base.ExecuteNonQuery(strsqlb);
}
//刪除主表 A
string strsqla = @" DELETE FROM A WHERE key1='" + keyList[i].Split(',')[] + "' AND key2='" + keyList[i].Split(',')[] + "' ";
//刪除語言表 C
string strsqlc = @" DELETE FROM C WHERE TableName= 'A' AND TableKey in('" + keyList[i] + "') "; strall += (strsqla + strsqlc);
}
//調用事務
return base.ExecuteNonQueryWithTran(strall) > ;
}
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操作
MVC中的Ajax与增删改查(二)的更多相关文章
- MVC中的Ajax与增删改查
自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...
- MVC中的Ajax与增删改查(一)
自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...
- 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计
在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...
- vue实战(一):利用vue与ajax实现增删改查
vue实战(一):利用vue与ajax实现增删改查: <%@ page pageEncoding="UTF-8" language="java" %> ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- ajax参考增删改查
AJAX做增删改查详细! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- 用CI框架向数据库中实现简单的增删改查
以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ...
- asp.net下利用MVC模式实现Extjs表格增删改查
在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC ...
- 在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建
通常,在同一个页面上实现增删改查,会通过弹出框实现异步的添加和修改,这很好.但有些时候,是不希望在页面上弹出框的,我们可能会想到Knockoutjs,它能以MVVM模式实现同一个页面上的增删改查,再辅 ...
随机推荐
- 洛谷P3242 接水果 [HNOI2015] 整体二分
正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这 ...
- 程序------>数据结构
一程序概念: 1.对身边的任何一个事物进行认知和分类,从而得到一些信息: 2.在得到的信息基础之上建立了概念模型: 3.根据概念模型将我们生活中的实际问题转换成计算机能理解的形式: 4.用户通过人机交 ...
- java各版本简单对比
1995.5 Oak ——>java1.0 提出 write once run anywhere 1996.1 jdk1.0 jvm Sun Classic VM 1997.2 JDK1.1 ...
- systemctl介绍
声明:本文转载自:systemd (中文简体) systemd 是 Linux 下的一款系统和服务管理器,兼容 SysV 和 LSB 的启动脚本.systemd 的特性有:支持并行化任务:同一时候採用 ...
- 从零开始编写操作系统——bochs
一.生成boot.bin boot sector代码: loop: jmp loop times -($-$$) db dw 0xaa55 重点就是最后的0xaa55 nasm boot.asm -f ...
- RN TextInput用法
效果图: 代码: import React, {Component} from 'react' import {StyleSheet, View, Text, TouchableOpacity, Te ...
- 2017-2018-2 20165236 实验四《Android开发基础》实验报告
2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:郭金涛 ...
- 2017-2018-2 20165236 实验三《Java面向对象程序设计》实验报告
2017-2018-2 20165236 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652 姓名:郭金涛 ...
- 发现Boost官方文档的一处错误(numpy的ndarray)
文档位置:https://www.boost.org/doc/libs/1_65_1/libs/python/doc/html/numpy/tutorial/ndarray.html shape在这里 ...
- 编辑文件 vi,vim的基本操作
vim 文件名字进入文件后 按i 进行编辑编辑确认后 按 Esc 停止编辑然后 按: 输入 wq (是root权限时才行:若是强制修改 需要 ...