Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果用户退出,如何清除表?_C#_Sql_Asp.net Mvc_Sql Server 2012 - Fatal编程技术网

C# 如果用户退出,如何清除表?

C# 如果用户退出,如何清除表?,c#,sql,asp.net-mvc,sql-server-2012,C#,Sql,Asp.net Mvc,Sql Server 2012,因此,我有一些用户将文件上传到我的服务器进行处理。内容被读取到一个SQL表中,出于所有目的将其称为ImportedData。然后,用户对其进行操作,然后当他们想要提交数据进行处理时,将数据提交到上游系统(此处不重要),然后将数据从所述表中移除 但是,在某些情况下,用户可能会进行导入,然后出于任何原因决定离开页面,关闭浏览器,然后回家一天,不管你有什么。影响是这些行将保留在ImportedData中 现在我最初的想法是运行一个代理作业来删除任何超过一天的行;用户不太可能希望在第二天早上处理数据 然

因此,我有一些用户将文件上传到我的服务器进行处理。内容被读取到一个SQL表中,出于所有目的将其称为ImportedData。然后,用户对其进行操作,然后当他们想要提交数据进行处理时,将数据提交到上游系统(此处不重要),然后将数据从所述表中移除

但是,在某些情况下,用户可能会进行导入,然后出于任何原因决定离开页面,关闭浏览器,然后回家一天,不管你有什么。影响是这些行将保留在ImportedData中

现在我最初的想法是运行一个代理作业来删除任何超过一天的行;用户不太可能希望在第二天早上处理数据

然而,有“更好”的方法吗


该应用程序是使用MVC ASP.Net Razor前端、后端的所有C#、实体框架等构建的。我只是想知道我能做些什么来从特定于该导入的导入数据中删除数据(该导入会话的唯一GUID)因此,当用户进行任何不干净的注销时,该导入所特有的数据将被删除?

我建议不要直接删除行。您可以为存储过程安排作业,将旧数据加载到临时表中,并将其保留到下次执行存储过程时

逻辑将是:

Create procedure Name
AS
BEGIN
(
IF EXISTS(SELECT * FROM SYS.TABLES WHERE NAME = N'...')
BEGIN
DROP TABLE ...
END
CREATE TABLE TABLE_NAME
...
INSERT INTO TABLE_NAME
SELECT ..
FROM YOUR_TABLE
)
END

只要确保数据被保留,以防发生不情愿的事情。

我建议不要直接删除行。您可以为存储过程安排作业,将旧数据加载到临时表中,并将其保留到下次执行存储过程时

逻辑将是:

Create procedure Name
AS
BEGIN
(
IF EXISTS(SELECT * FROM SYS.TABLES WHERE NAME = N'...')
BEGIN
DROP TABLE ...
END
CREATE TABLE TABLE_NAME
...
INSERT INTO TABLE_NAME
SELECT ..
FROM YOUR_TABLE
)
END

只要确保数据被保存,以防不情愿的事情发生。

这里有一件事你可以做:你可以在有问题的页面上添加一点javascript,定期对服务器进行ajax调用,合理的间隔——可能每几分钟一次——这将向服务器表明用户的浏览器仍在查看该记录。您可以在相应的数据库记录上更新某种LastClientHeartbeat时间戳,以指示仍在查看它。然后,在定期安排的清理作业中,您可以对其进行编程,以跳过删除LastClientHeartbeat时间戳相对较新(在最近几分钟内)的文件,因为这表明用户仍在浏览器中打开该页面


这不是一个非常复杂的解决方案,但实施起来非常简单,而且(大部分情况下)会防止您意外删除用户花了很多时间才完成工作的文件。

您可以做一件事:在相关页面上添加一点javascript,定期对服务器进行ajax调用,合理的间隔——可能每几分钟一次——这将向服务器表明用户的浏览器仍在查看该记录。您可以在相应的数据库记录上更新某种LastClientHeartbeat时间戳,以指示仍在查看它。然后,在定期安排的清理作业中,您可以对其进行编程,以跳过删除LastClientHeartbeat时间戳相对较新(在最近几分钟内)的文件,因为这表明用户仍在浏览器中打开该页面


这不是一个非常复杂的解决方案,但实施起来非常简单,而且(大部分情况下)会防止您意外删除用户花了很多时间才完成工作的文件。

举例说明流程中的每个步骤都会有帮助。您是否在后端读取内容时将内容写入数据库?举例说明流程中的每个步骤都会有帮助您的后端正在读取数据库中的内容?