如何在 WinForm 终止时打开数据库连接?

Posted

技术标签:

【中文标题】如何在 WinForm 终止时打开数据库连接?【英文标题】:How to open a database connection on termination of a WinForm? 【发布时间】:2021-07-13 06:52:36 【问题描述】:

当应用程序通过终止/终止关闭时,我正在寻找一种将数据发送到我的数据库服务器的方法。到目前为止,我发现可以在Form的Application.Run()之后运行一些代码,但是,在连接打开功能之后,代码似乎停止了。下面是一个演示。

        static void Main()
        
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new xxxForm());
            Console.WriteLine("Runs Fine.");
            if (UserSession != null)
            
                Console.WriteLine("Runs Fine.");

                mysqlConnection Connection = new MySqlConnection("Server=xxx; database=xxx; UID=xxx; password=xxx");
                Console.WriteLine("Runs Fine");
                Connection.Open();
                Console.WriteLine("STOPS RUNNING");
                string query = "UPDATE users SET clientstatus = 'offline' WHERE uuid = '" + UserSession.UUID + "' ";
                var cmd = new MySqlCommand(query, Connection);
                cmd.ExecuteNonQuery();
                Console.WriteLine("Doesn't Run");
                UserSession = null;
            
            Console.WriteLine("Doesn't Run");
        

我想知道是否有办法做到这一点,因为我似乎找不到太多关于这样做的文档。

注意:我之前在此下编写了很多代码并且它可以工作,但是由于某种原因连接没有。

【问题讨论】:

问:有没有办法[在 WinForm 终止时做点什么]?答:是的:只需在Application.ApplicationExit 上定义一个事件处理程序。问:您显示的代码实际上是来自“WinForm”应用程序吗?如果是这样,您的目标是哪个平台?赢32? 。网? .Net Core 3.1? .Net 5? 当你说杀死/终止时,你的意思是通过任务管理器吗? However, code seems to stop after the connection opening function.,程序是否退出,是否抛出任何错误? ApplicationExit 有效,但它不适用于终止应用程序,仅适用于像 Application.Exit() 这样的预定退出。是的,我的意思是任务管理器或其他“强制”应用程序关闭的方法。我知道我可以制作一个辅助应用程序,只是检查它是否死了,但这很丑陋,而不是我正在寻找的东西。程序以代码“1”退出。 好吧,我会说你有点走投无路了。杀死进程杀死进程死亡,这意味着没有更多的代码与该进程将要执行 【参考方案1】:

当应用程序通过终止/终止关闭时

你不能。杀死应用程序会暂停它的执行并将其从内存中删除。它没有机会做更多的工作

您必须改为推断它:

拥有一个所有应用程序都连接到的服务器,可以检测连接丢失并使用它来标记用户离线 让您的应用每 X 秒更新一次用户特定字段,例如用户表中的LastSeenDateTime 列。如果应用程序被杀死,它将停止更新。过去 LastSeen 超过 2X 秒的任何人都可能处于离线状态

【讨论】:

以上是关于如何在 WinForm 终止时打开数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

C# 测试SQL数据库连接时 winform 界面如何实时刷新控件。

C#Winform中,我在查询数据时等待时间过长,想用一个进度条显示机器正在查询,请问如何实现?

winform如何做出数据加载的效果

c#如何在winform中打开一个excel文档呢

如何在kettle报错时终止运行的同时将错误日志输出到数据库中

C# winform 如何设置让窗体尽在第一次启动时运行?