C# 按标识符从DataTable中更高效地删除Sql表

C# 按标识符从DataTable中更高效地删除Sql表,c#,sql-server,datatable,C#,Sql Server,Datatable,我必须使用C#DataTable插入或删除Sql表。我的两个策略是 一次删除一行,或 将DataTable抛出到存储过程中,并在存在的地方删除 我不喜欢这两种策略,因为#1效率低下,而且#2需要一些设置(用户模式、存储过程等) 还有别的(更好的)办法吗 有效率并不意味着容易#1是容易的,2是有效的。高效将需要设置,没有真正的方法来解决这个问题。在我看来,使用存储过程简化应用程序sql逻辑始终是一种更好的做法。例如,不要在应用程序代码中有一些疯狂的选择,而是在Sql Server中为其创建一个视图

我必须使用C#
DataTable
插入或删除Sql表。我的两个策略是

  • 一次删除一行,或
  • DataTable
    抛出到存储过程中,并在存在的地方删除 我不喜欢这两种策略,因为#1效率低下,而且#2需要一些设置(用户模式、存储过程等)

    还有别的(更好的)办法吗


    有效率并不意味着容易#1是容易的,2是有效的。高效将需要设置,没有真正的方法来解决这个问题。在我看来,使用存储过程简化应用程序sql逻辑始终是一种更好的做法。例如,不要在应用程序代码中有一些疯狂的选择,而是在Sql Server中为其创建一个视图。与其在应用程序代码中使用一些疯狂的删除查询,不如创建一个存储过程来执行。其好处将是性能和易于维护。您可以更改存储过程的内部工作,而无需更新任何应用程序代码。策略2并不是那么多工作。我更喜欢它,而不是循环中的数据库调用。堆栈溢出上已经存在常规指令,请查找它们。该存储过程只有几行长。应该是非常简单的设置。
    //place buy_detail_id into distinct datatable
    DataView view = new DataView(table);
    DataTable distinctIds = view.ToTable(true, "buy_detail_id");
    
    //strategey 1: delete one row at a time by Id
    foreach (DataRow row in distinctIds.Rows)
    {
        //delete one row at a time
        DeleteRow(row[0]);
    }
    
    //strategy 2: throw DataTable into a stored proc as parameter
    //then delete where buy_detail_id exists in distinctIds