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模式实现同一个页面上的增删改查,再辅 ...
随机推荐
- Vue子组件调用父组件的方法
Vue子组件调用父组件的方法 Vue中子组件调用父组件的方法,这里有三种方法提供参考 第一种方法是直接在子组件中通过this.$parent.event来调用父组件的方法 父组件 <temp ...
- 催希凡javaweb 学习28天
看到这样的博客,自己也在看传智播客的视频,收藏一下 催希凡javaweb 学习28天 http://www.cnblogs.com/Prozhu/category/824899.html
- js模拟下拉框
html <label class="selectGroup"> <span class="selectP"></span> ...
- (4.26)sql server存储过程优化
此博客介绍了简单但有用的提示和优化,以提高存储过程的性能. 0.with recompile:重编译 exec uspGetSalesInfoForDateRange ‘1/1/2009’, 31/1 ...
- (1.8)mysql中的trace
(1.8)mysql中的trace 以json格式存储
- SQL存储过程分页
CREATE PROC ZDY_FY(@Pages INT, @pageRow INT) --@Pages第几页 @pageRow每页显示几行 AS BEGIN DECLARE @starNum IN ...
- Java中的字段和属性
Java中的属性,通常可以理解为get和set方法.而字段,通常叫做“类成员”. 属性只局限于类中方法的声明,并不与类中其他成员相关.例如:void setA(String s){}String ge ...
- Jsp与Servlet面试题
一.jsp有哪些内置对象作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 respo ...
- PHP适配器模式
[IDatabase.php] <?php /** * 适配器模式 * 可以将不同的函数接口封装成统一的API * 应用举例1:数据库操作 mysql/mysqli/pdo * 应用举例2:缓存 ...
- eclipse回退到上个版本
在 team->show in history 中 选择版本,执行Revert Commit,然后push 到master,这样就可以了