2010-03-29 84 views
3

如何對ADO.NET連接的數據庫執行直接SQL命令? 我想發送一個DBCC SHRINKDATABASE到SQL服務器,在大的刪除過程後壓縮當前的數據文件。 DBCC命令後,函數ObjectContext::CreateQuery返回解析器錯誤。有沒有其他的方式來收縮數據庫文件,或者有其他方式直接將SQL命令發送到SQL Server?通過Ado.net連接將收縮命令發送到Microsoft SQL數據庫文件

回答

3

我剛剛發送此爲原料SQL:

using (SqlCommand command = new SqlCommand("DBCC SHRINKDATABASE(0)", connection)) 
{ 
    command.ExecuteNonQuery(); 
} 

另一種方法是把DBCC SHRINKDATABASE在存儲過程中,並從你的代碼中調用存儲過程。

+0

發送原始的SQL將是確定的,但如何能生SQL被髮送過ADO.Net連接,而不解析SQL? – user287107 2010-03-29 23:15:12

+0

@ user287107:查看我的答案更新。 – 2010-03-30 02:21:34

0

感謝馬克,我只是想弄清楚如何獲得SqlConnection。 下面是完整的源代碼(OK可以寫成一點點用更好的擴展方法):

public ActionResult Optimize() 
    { 
     using (BXPartsEntities Entities = new BXPartsEntities()) 
     { 

      System.Data.EntityClient.EntityConnection eConnection = Entities.Connection as System.Data.EntityClient.EntityConnection; 

      eConnection.Open(); 

      var SqlConnection = eConnection.StoreConnection as SqlConnection; 

      if (SqlConnection == null) 
       throw new ArgumentException("StoreConnection shall be SQL Connection"); 

      using (SqlCommand command = new SqlCommand("DBCC SHRINKDATABASE(0)", SqlConnection)) 
      { 
       command.ExecuteNonQuery(); 
      } 

      eConnection.Close(); 
     } 
     return Content("Done"); 
    }