MVC中的Ajax与增删改查(二)

时间:2023-03-09 08:45:04
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操作