asp.net 因多线程导致数据不唯一 有请大牛。。在线急等

问题描述

情况如下:我使用了一个web接口尚且称呼为A接口,该A接口每访问一次就输出一个数据库内最新的标题,然后同时对该记录进行标记下次不输出,但是我的webfrm使用了多线程后会多次抓取到同一内容,貌似是因为页面的处理速度远没有winfrm多线程速度快,我希望在多线程的情况webapi输出的内容是唯一的,请问这个我该如何处理?我希望直接从web接口处理该问题,谢谢!

解决方案

解决方案二:
没有人帮忙吗???
解决方案三:
api的这一方法加个lock,单次只允许一个用户读、改记录。
解决方案四:
既然是服务端并发问题,那么当然必须修改服务端你的asp.net程序。在你的关键操作中,必须能够同步。例如说你的查询可以跟“同时对该记录进行标记”在一个关系数据库事务中,才能避免幻象读数据。
解决方案五:
引用2楼ajianchina的回复:

api的这一方法加个lock,单次只允许一个用户读、改记录。

请详细说说如何操作??
解决方案六:
引用3楼sp1234的回复:

既然是服务端并发问题,那么当然必须修改服务端你的asp.net程序。在你的关键操作中,必须能够同步。例如说你的查询可以跟“同时对该记录进行标记”在一个关系数据库事务中,才能避免幻象读数据。

你好能详细说一下实现方法吗?
解决方案七:
引用4楼weng12的回复:

Quote: 引用2楼ajianchina的回复:
api的这一方法加个lock,单次只允许一个用户读、改记录。

请详细说说如何操作??

怎么说呢?你将API的这一方法贴上来就是了
解决方案八:
引用6楼ajianchina的回复:

Quote: 引用4楼weng12的回复:
Quote: 引用2楼ajianchina的回复:
api的这一方法加个lock,单次只允许一个用户读、改记录。

请详细说说如何操作??

怎么说呢?你将API的这一方法贴上来就是了

目前代码如下:publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";//context.Response.Write("HelloWorld");try{lock(this){stringkeywords="";stringid="";Socut.Readerdr=newSocut.Reader("SELECTTop1*FROM[Keywords]whereupdatetime<'"+DateTime.Now.ToString("yyyy-MM-dd")+"'");if(dr.Read()){keywords=dr["keywords"].ToString();id=dr["id"].ToString();Socut.Data.ExecuteNonQuery("update[[Keywords]setisbaidupc='1',updatetime='"+DateTime.Now.ToString("yyyy-MM-dd")+"'whereid="+id);}dr.Close();System.Web.HttpContext.Current.Response.Write(keywords);}}catch(Exceptionerr){//Response.Write(err.Message);}}
解决方案九:
你原来的锁改一下,lock(this)锁定的只是当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对该类其他实例并无影响。不过,你原先取值重复的重要原因在于你仅以日期条件来返回top1,肯定还是会出现重复的,怎么没用加上isbaidupc这个条件?privatestaticreadonlyobjectobj=newobject();publicvoidProcessRequest(HttpContextcontext){context.Response.ContentType="text/plain";//context.Response.Write("HelloWorld");try{lock(obj){stringkeywords="";stringid="";Socut.Readerdr=newSocut.Reader("SELECTTop1*FROM[Keywords]whereisbaidupc<>'1'updatetime<'"+DateTime.Now.ToString("yyyy-MM-dd")+"'");if(dr.Read()){keywords=dr["keywords"].ToString();id=dr["id"].ToString();Socut.Data.ExecuteNonQuery("update[Keywords]setisbaidupc='1',updatetime='"+DateTime.Now.ToString("yyyy-MM-dd")+"'whereid="+id);}dr.Close();System.Web.HttpContext.Current.Response.Write(keywords);}}catch(Exceptionerr){//Response.Write(err.Message);}}

解决方案十:
你是小于当前日期,那也行,我刚才写的那段里的sql语句少了个and,你还按你原来的查询吧,是试试看。
解决方案十一:
将你取数据和更新的操作写在一个数据库事务里面,因为默认的事务隔离机制,也就是数据库的锁机制,在一次事务操作结束前,下一个事务无法执行,必须等待

时间: 2024-09-20 06:38:35

asp.net 因多线程导致数据不唯一 有请大牛。。在线急等的相关文章

.NET 多线程同步 / 并发操作数据唯一

问题描述 在实际应用过程中很多情况下涉及大批量.频繁访问,这样就会存在并发操作,如何保证数据的唯一正确性就成了一个问题,以下将自己为别人做的一个示例展示给大家,什么不足的地方大家也提提意见!应用场景:售票系统,假如涉及到以下几种简单数据访问操作:1.余票查询:2.购票:3:临时增加售票/退票,如果访问量较大,很多个用户同时访问时.如1和2同时操作,2和3同时操作,1和3同时操作,就可能导致获取的数据信息不准确,这里我们就需要的效果就是当任何一个用户在进行如上的1或2或3操作时,其它用户都处于等待

一起谈.NET技术,ASP.NET4灵活显标记:数据Web控件改进

长期以来,使用Web控件的开发者都欣赏这些控件所具有的高生产力,但在控制它们生成的标记方面却付出了一定的代价.例如,许多ASP.NET控件会自动地使用元素来包装它们的内容,原因是为了方便布局或样式控制.然而,这种行为却与过去几年中不断发展的网络标准相违背;这些标准支持使用更清洁和更简洁的HTML标记,而建议节约使用标记;同时,它们提倡应当尽可能使用层叠样式表(CSS)来实现网页的布局和造型.此外,元素和其他自动添加的内容使得使用CSS来修饰Web控件和从客户端使用这些控件更加困难. ASP.NE

以前收集的一些资料---使用ASP加密算法加密你的数据(二)

加密|数据|算法          以前收集的一些资料---使用ASP加密算法加密你的数据(二)Julain Sitkewich在第一部分,讨论了如何生成密钥,下面将介绍如何使用这个密钥来加密和解密一个字符串.下面的代码就是能够同时实现这个功能的函数Crypt.asp文件<% Dim g_Key Const g_CryptThis = "Now is the time for all good men to come to the aid of their country."Co

多线程添加数据,如何去重

问题描述 多线程添加数据,如何去重 数据来源是某网站上的公开数据,而且不排除这些数据会不定时更新...不过由于数据量比较大,所以我就想用多线程添加进数据库. 但是在入库的时候发现数据出现大量重复:我当时开了4个线程,最后存入数据库的数据量就是标准的4倍之多,也就是单个线程他已经把全部数据都取下来了. 但如果不用多线程的话,执行效率着实有点低. 有什么办法能在数据进入数据库之前就去重吗? 毕竟我不想对数据库做什么改动,而且数据库的效率有点低... 解决方案 性能开销在网络上不在内存和cpu 所以你

java 多线程 出现数据重复调用问题

问题描述 java 多线程 出现数据重复调用问题 java 多线程 出现数据重复调用问题 用id来判断下是否重复可以啊? 求大神给个实列 解决方案 数据重复原因是多线程环境下未作同步处理导致的,可以参考这篇文章:http://blog.csdn.net/wojiushiwo945you/article/details/42553845 至于解决办法,可以使用通常的内置锁同步,即synchronized同步方法或者代码块.示例可参考:http://blog.csdn.net/wojiushiwo9

ASP.NET MVC中对数据进行排序的方“.NET研究”法

本系列是讲解如何在asp.net mvc中对数据进行展示.排序.分页等的系列文章.在上周的文章中,一步一步教会了大家如何使用ASP.NET MVC框架去的展示数据.在上周的文章中,我们先用Visual Studio创建了一个新的ASP.NET MVC应用程序,接着连接到了Northwind数据库,并展示了如何使用微软的LINQ-SQL的工具去访问数据库中的数据,接着指导如何去实现视图层去展示产品信息及如何设计控制器. 本文是在上一篇文章的例子基础上,展示了如何去实现数据的双向排序.如果你是已经熟

一起谈.NET技术,ASP.NET MVC中对数据进行排序的方法

本系列是讲解如何在asp.net mvc中对数据进行展示.排序.分页等的系列文章.在上周的文章中,一步一步教会了大家如何使用ASP.NET MVC框架去的展示数据.在上周的文章中,我们先用Visual Studio创建了一个新的ASP.NET MVC应用程序,接着连接到了Northwind数据库,并展示了如何使用微软的LINQ-SQL的工具去访问数据库中的数据,接着指导如何去实现视图层去展示产品信息及如何设计控制器. 本文是在上一篇文章的例子基础上,展示了如何去实现数据的双向排序.如果你是已经熟

在ASP中调用Excel画数据图表

excel|数据|图表 在ASP中调用Excel画数据图表,优势有很多,最突出的是可以输出多种形式的图形(总共有72种).以下是我写的一个通用ASP方法调用Excel画数据图表. <%'将数据图形化输出'dataArray二维数组'virtualFilePath输出图像文件名(虚拟路径)'nType显示类型Dim initTypeSub ExportPicture(dataArray,virtualFilePath,nType)Dim excelapp ' As New excel.Applic

ASP.NET中实现DataGrid数据排序

asp.net|datagrid|排序|数据 Visual Studio .Net为编写WinForm程序(即:在Windows平台下运行的程序)所提供的DataGrid组件比起微软以往的各种开发环境中提供的DataGrid组件都要"高级"许多.其"高级"的地方就在于不需要再进行任何其他设置或编程,DataGrid就能够对其中的数据分别按照升.降序进行排列.这种"高级"功能给我们编程提供了许多方便.图01是在WinForm程序中的DataGrid