我可以应用一些代码,如catch,如果数据库关闭或无法连接,应用程序不应该停止并退出

本文关键字:应用程序 连接 不应该 退出 代码 应用 catch 我可以 数据库 如果 | 更新日期: 2023-09-27 18:05:34

我已经构建了一个c#桌面应用程序,它的数据库是在线的。有时,因为互联网,它变得断开连接,因此,如果用户保存一个表单,数据库断开连接的错误发生,它被关闭和退出。这太可怕了。

是否有一个选项,我可以应用尝试捕获代码中的每一个地方,但问题是,应用程序是如此之大,它会成为一个头痛,连接字符串是一个,但连接是很多,我可以应用一些配置,如果数据库关闭,它不应该停止和退出,什么是最简单的解决方案。

谢谢爱迪

我可以应用一些代码,如catch,如果数据库关闭或无法连接,应用程序不应该停止并退出

看起来你必须从重构开始,并引入解耦的数据访问层,它知道如何处理数据库。那样生活就容易多了;)

这是一个常见的建议,可以为你节省20%的精力和80%的时间。

最快的解决方案是在程序中实现try catch .cs方法Main()

最好的解决方案是重构你的软件,在VS中使用搜索来搜索所有的连接,并用新的逻辑替换它。例如

  DataHelper.Load("conn_string_name", "query", sqlparameters);

异常处理程序就是为此而构建的。

未被捕获的异常将导致应用程序终止,因为发生了意想不到的事情,并且应用程序处于不稳定状态。这种"快速失败"的行为是经过设计的,因为它可以帮助你精确地追踪应用程序意外失败的地方,并且不会让你的应用处于未知状态。

不要用异常处理程序包装每个DB操作。相反,你可以考虑在应用的策略点为特定问题添加异常处理程序,但前提是你能够对所引发的错误做些什么。除非你确实能够纠正问题和/或采取补救措施,否则捕捉错误是没有意义的。

这里有一些正确处理异常的好建议

在Winforms应用程序中,有一个关于应用程序静态对象的事件叫做ThreadException。如果处理该事件,您将接收到即将从应用程序主线程抛出的所有异常。当所述异常类型可能从应用程序中的许多地方抛出时,这通常是按类型捕获异常的好地方。

然而,它也有它的局限性。它只适用于主线程(因此,任何抛出线程池异常的情况都不会在这里被捕获)。如果你的应用程序设计得很好,你可能会使用后台工作线程来访问数据,让主线程(处理UI)自由地保持应用程序的响应。

正如建议的那样,您还可以将数据访问抽象到程序体系结构的自己的层中,使用几个主要驱动函数来执行实际的DB读/写。将这些读写操作包装在try-catch块中,这些块将重试传输级错误、超时等,然后您就可以开始了。