sqlite数据库中,有一个数据表记录了很多表名,编程完成"在删除该表中的数据同时,删除被删除的数据行映射的表",该程序有高效率的改进方法没有?
CREATE TABLE TableId
(
ID char(33) not null,
Name nvarchar(50) not null,
Lnk int ,
UNIQUE(id,Name)
);
ID Name Lnk
a1 音乐 0
a2 交通 0
a3 娱乐 0
a4 视频 0
a1 Audio
1
a4 Video 1
……
id列的所有的值,都能在sqlite_master中找到,也就是说它们都是表名,
使用c#编程实现已完成如下要求:
在循环中删除tableId下的数据行的同时,如果删除的数据行的Lnk值为0,则删除被删除的数据行映射的表,若表不存在,则忽略抛出的异常,继续执行后面的循环
如果删除数据行的Lnk值为1,则删除该数据行的同时,不删除该数据行映射的表。
已完成该程序
using (SQLiteCommand command = new SQLiteCommand(connection))
{ foreach (var i in list)
{
try
{
if(i.Lnk==0)
{
command.CommandText = "delete from TableId where ID='"+i.id+"'";
command.ExecuteNonQuery();
command.CommandText = "drop table " + i.id; command.ExecuteNonQuery();
}else{
command.CommandText = "delete from TableId where ID='"+i.id+"' and Name='"+i.name+"'";
command.ExecuteNonQuery(); }
}
catch { }
finally { }
}
}
但是我总觉得数据量过大的话,可能效率会很慢,有什么高效率合适的改进方案没有?
如果使用事务的话,我担心抛出异常影响整个删除过程.