Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 两个或多个用户从DataTable中提取数据_C#_Asp.net_Datatable - Fatal编程技术网

C# 两个或多个用户从DataTable中提取数据

C# 两个或多个用户从DataTable中提取数据,c#,asp.net,datatable,C#,Asp.net,Datatable,我有一个ASP.NETWeb应用程序,可以将客户呼叫到站点。五名员工同时运行此应用程序,当他们看到客户走进时,他们单击按钮客户呼叫客户并来到他们的站点 这是我的问题。我从SQL中获取数据并将其存储在数据表中。有时,当两个或多个职员同时单击时,他们会呼叫同一客户 有什么办法可以防止这种情况发生吗?我遇到过类似的问题,成千上万的人点击同一个按钮,试图获得有限数量的斑点。下面是一个类似的解决方案: 当他们单击您的按钮时,运行一个存储过程将该用户标记为可见 存储过程将首先检查用户是否标记为已看到,如果标

我有一个ASP.NETWeb应用程序,可以将客户呼叫到站点。五名员工同时运行此应用程序,当他们看到客户走进时,他们单击按钮客户呼叫客户并来到他们的站点

这是我的问题。我从SQL中获取数据并将其存储在数据表中。有时,当两个或多个职员同时单击时,他们会呼叫同一客户


有什么办法可以防止这种情况发生吗?

我遇到过类似的问题,成千上万的人点击同一个按钮,试图获得有限数量的斑点。下面是一个类似的解决方案:

  • 当他们单击您的按钮时,运行一个存储过程将该用户标记为可见
  • 存储过程将首先检查用户是否标记为已看到,如果标记为已看到,请退出(我使用RAISEERROR并传回一条消息,然后在代码中捕获SQL异常,这样您就可以告诉他们已经调用了哪个用户)
  • 如果尚未看到用户,存储过程的下一步操作是将其标记为已看到

  • 因此,单击按钮的人要么成功看到了客户,要么收到一条消息说客户已经被看到。

    您遇到的问题是一个问题。尝试将对datatable的读取封装在一个lock语句中(有几个),您计划返回调用线程的记录应该被标记,以便其他线程不会拾取它们,请尝试类似以下操作:

    private Object _syncObject = new Object();
    private DataTable yourDataReadMethod() {
       lock(_syncObject)
       {
       // Read records to return to calling thread.
    
       // Flag records read so they are not given to other threads. You might need expiration date in case the records are not completed in a timely manner.
       }
    }
    

    此外,如果在呼叫发生后更新记录,则应将db上次更新日期与客户端表单中保留的日期进行比较;如果它们不同,则引发异常,因为这意味着其他人已经更新了记录。希望这能有所帮助。

    锁定对数据的访问权限,以便一次只能有一个呼叫者在“呼叫客户”代码中。@zimdanen有什么想法可以实现吗?@Apollo你怎么知道何时呼叫客户?可以显示存储此信息的sql表吗?@MikeSmithDev在调用客户时,会将日期/时间戳写入该记录。我要做的是首先检查客户是否打过电话或写信给它。我会试试看。