我们想ADOConnection
在一个程序中使用。
在其他软件中,我们可以在实际会话中使用“会话”(连接)id,我们也可以列出实际(其他)连接。
如果程序错误终止,我们使用此功能从特殊表中清除永久数据。
有时我们用真实的记录来签署一些东西。在之前的数据库中,我们有更多的选项来清除它们。
同一连接中的另一个事务,它保存记录和“nowait”选项来检查真正的锁(是否处于活动状态)。
数据库级触发器(连接时,断开连接时)以清除某些内容。
唯一会话 ID + 访问会话列表以确定会话是否存在。
将在会话结束时删除的全局(但基于会话)对象,但我们可以检查它们的存在。
在 SQL Server 中,我不知道该怎么做。正如我在这个数据库中看到的:
a.) 我们没有真正唯一的会话 ID。
b.)我们没有公共临时表,其中包含将在会话结束时删除的记录。
c.)我们不会列出以某种方式链接实际会话的已连接会话(连接)(通过 id,通过在相同用户名但另一个应用程序上产生差异的东西)。
d.) ADO 通过连接有一个事务,并且该事务似乎是阻塞的。我们不想仅将此功能的连接数加倍。
I.) 正如我所见,如果名称可以包含表名 + 键值,那么只有全局临时表才有帮助。
例如:
“bill_head_ID28338328”表的存在意味着(标志)有人锁定了密钥 28338328。
如果这个连接异常终止,它的全局临时表最终会消失。
II.)或者如果我有一个名为“living_connections”的表,那也是一样的。
每个连接都会将一个基于 GUID 的 ID 插入到该表中 + 创建一个名为“LIVCON_”的全局临时表 + GUID。
通常程序会在最后从“living_connections”中清除自己的记录。但是我们有一个“自动清洗”功能。
这可以列出 living_connections,并检查所有具有相同 GUID 的全局临时表。如果它找不到它,这意味着连接以某种方式死亡。
然后我们可以清除该记录以及所有链接的记录。
但也许这是一个错误的想法。
你怎么看?你有什么好主意来检查哪些连接是有效的,哪些永久标志是有效的?
感谢您的任何帮助,提前,链接等。
一些扩展:MS-SQL 服务器可能使用 TCP/IP(套接字)连接参数来确定哪个客户端处于活动状态。如果连接异常终止,服务器可能会使用默认的 keepalive 参数,即 2 小时... :-(