在 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)?的主要内容,如果未能解决你的问题,请参考以下文章