2015-12-19 43 views
1

我需要從我的數據庫表中刪除所有數據。所以我使用DataContext.ExecuteCommand使用一個DataContext.ExecuteCommand來爲多個表執行查詢

db.ExecuteCommand("DELETE From Products"); 

此方法會爲每個表導致對數據庫的新請求。我想在一個查詢中清除我的表中的數據。但我迄今爲止的所有嘗試都失敗了。

是否可以使用DataContext.ExecuteCommand從多個表(多個SQL查詢)中刪除數據?


 try 
     { 
      using (var context = new DataContext()) 
      { 
       context.DeleteAll(); 
      } 
     } 
     catch (Exception exception) 
     { 
      LogHelper.Log(exception); 
     } 

private static void DeleteAll(this DataContext context) 
     { 
      var ctx = ((IObjectContextAdapter)context).ObjectContext; 

      ctx.ExecuteStoreCommand("DELETE FROM [RegionProducts]; DELETE FROM [ProductTypes]; DELETE FROM [Measurements]; DELETE FROM [Sizes]; " + 
            "DELETE FROM [Regions]; DELETE FROM [Types]; DELETE FROM [Categories]; DELETE FROM [Images] where Product_Id is not null; DELETE FROM [Products]; " + 
            "DELETE FROM [Brands]; DELETE FROM [Images];"); 
     } 

回答

1

這將在很大程度上取決於實際的數據庫系統你使用 - 但在如情況SQL Server中,你應該能夠有多個DELETE語句 - 用分號隔開 - 是這樣的:

string deleteQuery = "DELETE FROM dbo.Products; DELETE FROM dbo.OtherTable; DELETE FROM dbo.YetAnotherTable;"; 

db.ExecuteCommand(deleteQuery); 

當然,您需要注意任何可能的FK關係,這可能會導致一個刪除失敗,如果其他表還引用其數據 - 但它應該能夠做到這一點在單db.ExecuteCommand呼叫

更新:不幸的是,在SQL Server 精簡版 V4您使用的是,你不能有多個SQL語句在一個命令中 - 它只是不被支持。這種方法適用就好真正 SQL Server中的 - 但它會在SQL Server CE 工作 ...

+0

約FK - 我發現從表中刪除數據的正確方法,當我爲獨立的服務器創建'ExecuteCommand'。我希望它能像你的例子一樣在查詢中工作? – demo

+0

不知道爲什麼,但我得到錯誤:'解析查詢時出錯。 [令牌行號= 1,令牌行偏移量= 31,令牌出錯= DELETE]' – demo

+0

如果'context是DataContext',使用'context.Database.ExecuteSqlCommandAsync'會更好嗎? – demo