asp.net网站控制并发方式问题

天府荣城 2012-11-15 10:21:39
我新建一个测试数据库,数据库只添加了一条记录,金额改为50

为了能够控制并发,金额不会成为负数,我写了下面的代码
double count = 40;//扣除的金额
DataTable table = SqlHelp.ExecTable("", "select * from UserInfo WHERE Price>" + count, SqlType.Sql);
if (table.Rows.Count > 0)
{
double price = Convert.ToDouble(table.Rows[0]["Price"]);
double temp = price - count;
SqlHelp.ExecNonQuery("", "UPDATE UserInfo SET Price=" + temp + " WHERE Price=" + price + " AND Price>" + count, SqlType.Sql);
Console.WriteLine("当前时间:" + DateTime.Now.ToString("HH:mm ss-fffffff") + ",剩余金额:" + temp);
}

想请问各位前辈,这种方式能够控制并发吗,跟entity控制时间戳,哪个控制更精确一些?
...全文
214 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
天府荣城 2012-11-19
  • 打赏
  • 举报
回复
多谢各位前辈帮忙了,现在结贴给分了。
CSMSDN 2012-11-16
  • 打赏
  • 举报
回复
引用 6 楼 songbb123 的回复:
引用 2 楼 ssp2009 的回复:金额字段加个check约束就行了,并发是用锁来处理。 加个check约束是可以,不过我发帖的主要是询问,处理并发方式,这两种,哪种方式更好,控制的更精确
可以的啊,用事务,如果你对锁研究不深,就用隔离级别吧 把级别调到最高,就可以完全控制并发,不过,人多,会常常死锁
天府荣城 2012-11-16
  • 打赏
  • 举报
回复
引用 2 楼 ssp2009 的回复:
金额字段加个check约束就行了,并发是用锁来处理。
加个check约束是可以,不过我发帖的主要是询问,处理并发方式,这两种,哪种方式更好,控制的更精确
天府荣城 2012-11-16
  • 打赏
  • 举报
回复
引用 4 楼 haukwong 的回复:
你这个逻辑用一条sql就可以实现了。 update UserInfo set Price=Price-40 where Price-40>0 如果有更加复杂的要求,可以在SQL中用存储过程来判断。 如果你要用C#做的话,把这段代码lock起来就可以了。
因为牵涉到并发,所以我在修改的where条件加了个 金额是否等于取出的金额
Hauk 2012-11-15
  • 打赏
  • 举报
回复
你这个逻辑用一条sql就可以实现了。 update UserInfo set Price=Price-40 where Price-40>0 如果有更加复杂的要求,可以在SQL中用存储过程来判断。 如果你要用C#做的话,把这段代码lock起来就可以了。
sunashang 2012-11-15
  • 打赏
  • 举报
回复
引用 2 楼 ssp2009 的回复:
金额字段加个check约束就行了,并发是用锁来处理。
你指的是乐观锁跟悲观锁吧
快溜 2012-11-15
  • 打赏
  • 举报
回复
金额字段加个check约束就行了,并发是用锁来处理。
sunashang 2012-11-15
  • 打赏
  • 举报
回复
CSDN现在没有高手吗

62,046

社区成员

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

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

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

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