标签:提前 信息 数据 ret logs cat 从表 table 逻辑
上一篇记录的是前台操作,下面写一下后台 ,本来自认为是没有必要做补充,毕竟思路啥的都有,实际上在做删除操作的时候,折腾了一天,还是自己太嫩,逻辑不够严谨,这里作下记录。
关于表结构这里再作下说明:
①表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操作
标签:提前 信息 数据 ret logs cat 从表 table 逻辑
原文地址:http://www.cnblogs.com/Sientuo/p/6897750.html