如何在SQL Server中创建自动列?

时间:2014-07-29 10:13:33

标签: c# sql sql-server winforms

IDE:Visual Studio,C#.net 4.0,Winforms应用程序

在SQL Server中有没有办法在表中实现一个列,当它没有从应用程序端收到任何ACK(确认)信号时,它可以自动设置为0?

要求是我想保留一个列,该列可以跟踪应用程序是打开还是已关闭?

实现的一种方法是使用OnClose()事件,即在Close()上我可以将其值更改为0.但问题是假设应用程序由于某种原因被挂起或者电源是超过数据库中的值将不会更新为零。

所以我想创建一个自动列,它可以跟踪这种情况,当应用程序没有发送任何请求或空闲意味着关闭时,它自己为零。

请建议如何处理。

2 个答案:

答案 0 :(得分:0)

你做不到。您可以做的唯一事情是将GETDATE()保存在表中的列中作为应用程序的最后活动时间,并且例如每隔10秒从高优先级线程调用存储过程。

如果您想知道应用程序是否处于活动状态,只需检查此值,如果超过10秒,那么您的应用程序就会消失。

更新: 更精确但更复杂的方法是在应用程序内部监听套接字,然后每当您想知道应用程序是否处于活动状态时,从您的sql脚本向PING应用程序发送请求。你应该使用CLR编程来实现这种方法,但我认为第一个实际上就足够了。

答案 1 :(得分:0)

考虑到它将是一个多实例场景,其中应用程序的多个实例可以指向同一个数据库。您可以尝试以下方法:

  1. 创建一个单独的表来维护会话。该表将包含三列1)机器名称或IP 2)会话ID(GUID)和3)TimeStamp。
  2. 每当应用程序启动时,创建一个新的会话ID并在该表中输入,这意味着将启动新的会话。
  3. 根据会话ID继续更新每个请求的时间戳。
  4. 在web.config或数据库中的某处配置超时,以后会派上用场。
  5. 现在,当应用程序正常退出时,请从表中删除该行。
  6. 现在,如果应用程序崩溃,该行将不会被删除,因此下次应用程序启动时,您可以检查该行是否已存在。使用计算机名称或IP查询表。
  7. 使用上面(3)中配置的超时设置来确定应用程序的闲置时间。