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模式实现同一个页面上的增删改查,再辅 ...
随机推荐
- Celery 出现Process 'Worker-5' pid:5608 exited with 'exitcode 1' 问题
起初我以为是进程PID文件问题,从新删除问题并未解决. 现已解决办法公布如下: pip install --upgrade billiard 原因:依赖的billiard库版本有点低,更新即可
- sqlserver数据库查询,在数据类型不一致时容易出错
1. 如此句sql: select SysNo from User_MainInfo where Ouid=@Ouid 在 User_MainInfo表中Ouid是nvarchar类型,但当我们传入的 ...
- 前端 HTML form表单标签 input标签 type属性 radio 单选框
<input type="radio"> 单选框 适用于 选择性别按钮网页等 <!DOCTYPE html> <html lang="en& ...
- $ sudo python -m pip install pylint 出错解决方法
问题:在unbuntu执行$ sudo python -m pip install pylint出错解决方法支行以下命令sudo pip install pylint==1.9.3这样roboware ...
- SpringBoot 项目健康检查与监控(转)
前言 You build it,You run it, 当我们编写的项目上线后,为了能第一时间知晓该项目是否出现问题,常常对项目进行健康检查及一些指标进行监控.Spring Boot-Actuator ...
- Linux文本编辑器之vim
VIM 文本编辑器 vim/vi是Unix/Linux上最常用的文本编辑器而且功能强大.注意:只有命令,没有菜单 VIM工作模式 命令模式:又称为一般模式 编辑模式:又称为低行模式,命令行模式 插入命 ...
- mvc中文件上传下载
//控制器 public ActionResult FileUpLoad(HttpPostedFileBase f1) { string path = Server.MapPath("~/P ...
- windows安装 centos
1. 使用最新版UltraISO将ISO镜像刻录到U盘 2. U盘启动电脑进入安装界面 正常情况下你应该会看到下面的这个界面: 选择第一项,然后按TAB键(在评论区有朋友踫到没有按TAB键的提示,经d ...
- python SMTP
一.一开始,相信SMTP服务,所以在本机安装了一个 apt-get install sendmail apt-get install sendmail-cf apt-get install squir ...
- Cocos Creator 动作(动画)笔记
动作cc.ActionInterval 和cc.ActionInstant; var action = cc.moveTo(2, 100, 100); // 创建一个移动动作node.runActio ...