|zyciis| 第二贴:如何防止SQL事务并发时,造成数据错乱的问题 大家看有什么好的解决方法 原贴:ASP.NET 面向对像方法和SQL数据库的冲突

zyciis208 2009-01-05 03:57:39
http://topic.csdn.net/u/20090105/15/0a42d5cb-0790-42db-815a-e124db133b25.html?799535351
|zyciis| 200:ASP.NET 面向对像方法和SQL数据库的冲突 大家看有什么好的解决方法 谢谢 PS:问题很长

CSDN牛人回答:
oo.BeginTransation(IsolationLevel.*****,"");
asp.net的事务处理可以设置不同级别的锁,好好看看MSDN
-----------------------------------------------
RE:那哪个级别的BeginTransation可以锁定我读取的单行数据


其实,假设info根本不是从数据库中读取的,而是内存中的static对象,假设你没有lock,你仍然会遇到所谓“并发”问题。

所以,你的问题跟“asp.net面向对象方法和SQL数据库的冲突”还是有些不太贴切的。
---------------------------------------------
RE:sp1234那现在这个怎么办呢


谢谢
...全文
202 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovehongyun 2009-01-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zyciis208 的回复:]
将系统时间转换成UNIX时间戳
-----------------------------
RE:
这个和我上面的有什么关联呢
我实在看不出佳佳姐发的代码和我上面的有什么关联

谢谢


你的意思是在一个用户读取了id = 1的记录后,另一个用户不应该读到这条记录对吧?
----------------------------------
RE:就是这个问题


谢谢
[/Quote]
你可以看一下你上个帖子里我发你的那个链接地址.
fcxxfcxx 2009-01-05
  • 打赏
  • 举报
回复
学习
wuyq11 2009-01-05
  • 打赏
  • 举报
回复
zyciis208 2009-01-05
  • 打赏
  • 举报
回复
给事务的级别定为:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
--------------------------------------
RE:这个问题我已经在SQL专区里面回答了
http://topic.csdn.net/u/20090102/17/24e43a0e-fb92-4808-99cc-9a951da3fb95.html?1262285010
http://topic.csdn.net/u/20090102/23/2A2FFB74-2BC1-4D59-AD2F-CA38A5BD85DA.html
LEVEL REPEATABLE READ
后我Select出来的用户信息,别人事务还是可以读取


谢谢
zyciis208 2009-01-05
  • 打赏
  • 举报
回复
将系统时间转换成UNIX时间戳
-----------------------------
RE:
这个和我上面的有什么关联呢
我实在看不出佳佳姐发的代码和我上面的有什么关联

谢谢


你的意思是在一个用户读取了id = 1的记录后,另一个用户不应该读到这条记录对吧?
----------------------------------
RE:就是这个问题


谢谢
jiang_jiajia10 2009-01-05
  • 打赏
  • 举报
回复
//1 将系统时间转换成UNIX时间戳
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970,1,1));
DateTime dtNow = DateTime.Parse(DateTime.Now.ToString());
TimeSpan toNow = dtNow.Subtract(dtStart);
string timeStamp = toNow.Ticks.ToString();
timeStamp = timeStamp.Substring(0,timeStamp.Length - 7);
Response.Write(timeStamp);

//2将UNIX时间戳转换成系统时间
string timeStamp = this.txtDate.Text;
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970,1,1));
long lTime = long.Parse(timeStamp + "0000000");
TimeSpan toNow = new TimeSpan(lTime);
DateTime dtResult = dtStart.Add(toNow);
Response.Write(dtResult);
lovehongyun 2009-01-05
  • 打赏
  • 举报
回复
这里我就想有没有办法在
MemberInfo infoMember = Member.GetInfo(oo,1);//这里是取得ID=1的会员信息
(其实他的SQL为 Select * From Member Where ID = 1);
这里的时候对这条记录进行排他锁呢?
=========================
你的意思是在一个用户读取了id = 1的记录后,另一个用户不应该读到这条记录对吧?


因为在用户a读到了id=1的记录后.对他更新了.
但b也同时读到了id = 1这条记录,又对其更新,这样造成并发.

你是想解决这个问题?可以用时间戳的办法,很有效的

zpcoder 2009-01-05
  • 打赏
  • 举报
回复
看不懂你发的帖子

SQL中的要事务的目的就是为了更好了保障数据的完整性。(不让它错乱)
lovehongyun 2009-01-05
  • 打赏
  • 举报
回复
你去查查时间戳的用法
解决单行并发很有效的

可以用timestamp类型

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧