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模式实现同一个页面上的增删改查,再辅 ...
随机推荐
- CentOS安装HBase
1.下载HBASE http://www.apache.org/dyn/closer.cgi/hbase/ 2.解压文件到安装目录 #mkdir hbase #cd hbase #tar -zxvf ...
- 分布式文档系统_document查询内部原理
1.客户端发送请求到任意一个node,成为coordinate node2.coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮 ...
- 【JMeter】【性能测试】响应信息不明确的接口做关联
1:做接口关联的时候,发现接口响应没有可以利用的信息.如下图只返回了一个成功的标识,这样的接口如何与之关联? 通过抓包观察后续的修改功能,发现需要传入一个id和一个title.但是前面的接口没有返回, ...
- left join 太神奇了
概念: 把left join左边的表的记录全部找出来.系统会先用表A和表B做个笛卡儿积,然后以表A为基表,去掉笛卡儿积中表A部分为NULL的记录.最后形成你的结果. 进行左连接时,就有涉及到主表.辅表 ...
- python的mutable变量与immutable变量
python的变量分为mutable(可变的)和immutable类型. mutable:dict, list immutable:int , string , float ,tuple..
- 实现并发join的方法
import threadingimport time def music(): print("begin to listen %s" %time.ctime()) time.sl ...
- sap 查看自己代码的结构
1:进入系统X3C:然后输入T-CODE bsp_wd_cmpwb
- 多线程——interrupt方法
测试interrupt()方法: package day_12_01_Thread; import java.util.Date; /** * 测试interrupt()方法:结束线程,但是线程还是活 ...
- jquery中把一串字符串分割,如:123456789后者abcdefg类型的
函数:slice() 功能:arrayObject.slice(start,end) start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元 ...
- Hybrid设计--Hybrid中Native能力的设计
稍微成熟的团队,header一定是不利于业务的UI组件,这个组件会封装在view层,方便前端使用.对业务前端开发来说,不用关注header是如何实现的,只用框架层释放的API.(一个前端有一个自己的U ...