2011-07-15 45 views
0

VS 2008/C#/ MS Access 2003/2007在C#中,我應該如何關閉正在運行的線程(Access數據庫)?

我附上了在發佈模式下拋出異常的代碼片段。在調試模式下,應用程序效果很好。

爲了測試這段代碼,我轉到了控制檯應用程序。當我運行該應用程序時,它顯示MS Access DB已在使用中。

因此,在執行這段代碼之前,我需要殺死MS Access數據庫進程。無論是否在使用,我需要殺死所有的緩衝過程。

我應該在執行這段代碼之前殺死進程?

try 
    { 

     Access.Application access1 = new Access.Application(); 

     // Open the Access database for exclusive access 
     string sSalisburyAccessDB = Server.MapPath("~/App_Data/Salisbury.mdb"); 

     access1.OpenCurrentDatabase(sSalisburyAccessDB, true, null); 

     // Drop the existing table data 

     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "drug"); 
     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "patplan"); 
     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "plans"); 
     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "price"); 
     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "rx"); 
     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "patient"); 
     access1.DoCmd.DeleteObject(Access.AcObjectType.acTable, "plntrak"); 

     // Run the saved import 
     access1.DoCmd.RunSavedImportExport("SalisburyODBC"); 

     // Close the database 
     access1.CloseCurrentDatabase(); 

     // Quit MS Access 
     access1.Quit(Access.AcQuitOption.acQuitSaveAll); 

     Response.Write("successful"); 

    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 
+0

我沒有看到任何可能無法自動執行Access的情況。也就是說,您可以使用DAO刪除表,並且可以使用普通的舊SQL語句導入/導出數據。自動化訪問看起來對我來說過分了。 –

回答

1

我懷疑問題是你不關閉連接,如果在主塊中引發異常。嘗試把access1.CloseCurrentDatabase();在最後一塊。

編輯如果你真的想殺死這個過程,那麼你可以使用Process.Kill。我會推薦它,因爲你可能會導致你的用戶丟失數據。

+0

我最終沒有使用 – goofyui

+0

我知道你沒有。我說你應該確保數據庫關閉 –

+1

@Chok:在這種情況下 – BrokenGlass

相關問題