我正在尝试在我的应用的每个winform中获取当前记录(在我的应用中)用户,但我不知道如何区分应用中的多个已记录用户。
我有一个ActiveUsers
SQL表,SessionID
和UserID
来标识单个用户。
如果应用程序异常终止,我该如何关闭会话(从userid
表中删除ActiveUsers
)?
任何帮助?
编辑:该应用程序由多个winforms组成,旨在同时在多个Pcs中运行。用户在应用程序中创建并存储在SC_User
表中,UserID
为PK。 ActiveUsers
表格为UserID
为FK,SessionID
为PK。我想要的是在任何winform中使用应用程序获取用户的UserID
并使用它来例如更改该用户的应用程序语言首选项。对于单个用户,我在登录时在UserID
插入ActiveUsers
,在注销时删除。
答案 0 :(得分:0)
保持应用程序范围的数据非常简单。您所要做的就是在项目中添加静态(shared在vb.net中)或singleton类,并在其中存储应用程序范围的数据。 (额外阅读:differences between singleton and static)
关于第二个问题,您还没有办法知道客户端是否在没有正确注销的情况下关闭。您在这些情况下所做的是实施keep-alive机制。
一个简单的实现是在会话表中添加另一列,以便在登录用户最后一次激活时跟踪时间戳(通常,静态/单例类中的计时器将负责每个更新此列x时间,一旦此列与当前日期时间之间的差异足够大,您可以安全地假设应用程序在没有正确注销的情况下关闭。
您甚至可以在sql server上运行预定作业,以删除应用程序关闭的会话表上的记录,如果您愿意,则无需正确注销。