none
sqlite数据库中,有一个数据表记录了很多表名,编程完成"在删除该表中的数据同时,删除被删除的数据行映射的表",该程序有高效率的改进方法没有? RRS feed

  • 问题

  • 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 { } } }


    但是我总觉得数据量过大的话,可能效率会很慢,有什么高效率合适的改进方案没有?

    如果使用事务的话,我担心抛出异常影响整个删除过程.




    2017年4月10日 9:31

答案

  • 可以考虑把数据先在内存中计算好,再一次性的发送到SQLLite中

    比如

    delete from TableId where ID='"+i.id+"'"; 

    可以换成

    delete from TableId where ID IN (1,2,3,5) 

    DELETE语句也可以用同样的方法完成。

    一次操作多笔数据代替一次操作一笔数据,改善效率。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年4月11日 0:02
  • 你好,

    >>怎么一次性删除多个表?

    也可以使用一个SQL 来drop。 例如:

    SQL = "Drop Table a1; Drop Table a2; Drop Table a3....";

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月11日 3:25
    版主

全部回复

  • 可以考虑把数据先在内存中计算好,再一次性的发送到SQLLite中

    比如

    delete from TableId where ID='"+i.id+"'"; 

    可以换成

    delete from TableId where ID IN (1,2,3,5) 

    DELETE语句也可以用同样的方法完成。

    一次操作多笔数据代替一次操作一笔数据,改善效率。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年4月11日 0:02
  • 可以考虑把数据先在内存中计算好,再一次性的发送到SQLLite中

    比如

    delete from TableId where ID='"+i.id+"'"; 

    可以换成

    delete from TableId where ID IN (1,2,3,5) 

    DELETE语句也可以用同样的方法完成。

    一次操作多笔数据代替一次操作一笔数据,改善效率。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    怎么一次性删除多个表?
    2017年4月11日 0:35
  • 你好,

    >>怎么一次性删除多个表?

    也可以使用一个SQL 来drop。 例如:

    SQL = "Drop Table a1; Drop Table a2; Drop Table a3....";

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月11日 3:25
    版主