在 C# 中,我应该如何关闭正在运行的线程(Access DB)?

Posted

技术标签:

【中文标题】在 C# 中,我应该如何关闭正在运行的线程(Access DB)?【英文标题】:In C#, How should i close running threads ( Access DB )? 【发布时间】:2011-07-15 16:03:44 【问题描述】:

VS 2008 / C# / MS Access 2003 / 2007

我附上了在发布模式下引发异常的代码片段。在调试模式下,应用程序运行良好。

为了测试这段代码,我搬到了控制台应用程序。当我运行该应用程序时,它显示 MS Access DB 已在使用中。

所以,在执行这段代码之前,我需要杀死 MS Access DB 进程。不管是否在使用,我都需要杀死所有的缓冲进程。

在执行这段代码之前我应该​​如何杀死进程?

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);
    

【问题讨论】:

如果没有自动访问,我看不到任何可能无法实现的内容。也就是说,您可以使用 DAO 删除表,并且可以使用普通的旧 SQL 语句导入/导出数据。自动化访问对我来说似乎有点矫枉过正。 【参考方案1】:

我怀疑问题是如果在主块中引发异常,您不会关闭连接。尝试把 access1.CloseCurrentDatabase();在 finally 块中。

编辑如果你真的想终止进程,那么你可以使用Process.Kill。我建议您不要这样做,因为您可能会导致您的用户丢失数据。

【讨论】:

我知道你不知道。我说你应该确保数据库是关闭的 实际上,MSACCESS.EXE 进程一直在运行!!我们需要强制它杀死这个.exe @BrokenGlass,我没听懂你!! @TomSquires,好的,我终于用上了!!但我仍然面临这个问题!现在,我们有什么办法可以强制从 C# 中杀死 MSACCESS.EXE 线程

以上是关于在 C# 中,我应该如何关闭正在运行的线程(Access DB)?的主要内容,如果未能解决你的问题,请参考以下文章

一个使用两个线程的简单 C# 游戏循环,这样好吗? [关闭]

c# - 如何强制关闭运行它自己的线程的后台工作者

如何使用 C# 链接数据库 [关闭]

C# winForm Socket 多线程 编程 关闭问题

如何在 C# 中添加(简单)跟踪? [关闭]

不将引用类型复制到 C# 中的每个线程是不是存在性能劣势? [关闭]