c# 与 sql的问题。

benbenr 2009-03-04 01:42:48
是这样的,我们的一个发传真的系统。提供给客户用是WEB方向的,还有2个WINFORM的检测(B)和上传文件用(A)的。

同时都连接了一个数据库。传真在WEB操作的地方会预扣0.5元钱发传真。我的A会去数据库里老要上传的文件。上传失败的话会把预扣的钱返回给总额里。

B的话就是去检测传真发送的状态,成功的话计算钱,从预扣的地方扣出0.5元,然后减掉金额,加会给总额(可能是负数,但是一样是扣成功的)
失败的话,在预扣值上扣0.5RMB,加回总额。

简单的说,有个锁定值:就是当前发的传真锁定的金额。大部分在里面操作。

可是程序跑着跑着,出现了锁定金额里面的钱多了出来。

算了下用掉的钱和剩余的钱加上锁定的钱和之前的总金额是一样的。

我很郁闷,不知道原因在那里,大家可以帮我出出主意么?

先说下我的SQL是怎么执行的,我没用框架,自己拼了一个list<string>存储sql语句,然后用Sqlconnection+sqlcommand+sqlreader来执行语句。

update tfax_userdata set locksum = convert(numeric(20,2), locksum) - 0.5, amount = convert(numeric(20,2), amount) + {0} where account = '{1}'

以上是扣钱的语句,是成功的。别的也大致相同,只是把钱加回给account...

我不明白为什么锁定值里面会多出来。查了log,发现所有的预扣的数目,成功、失败的地方记录都是全的。没有少执行语句。。。
我现在是彻底找不着北了。。。很不能理解为什么会这样。

大家出点建议。。。小弟在这写过了。
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbenr 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 agentianle 的回复:]
呵呵,下次问题要描述清楚啊,大家才好帮忙

做这种事情,主要需要注意:

1、数据库操作要用事务

2、多线程访问数据库最好统一在一个地方进行,并进行加锁,即进行线程同步控制
[/Quote]

嗯,太草率了,现在加上事务了。

多线程的数据库操作上,我这里做了点控制。
因为2个程序的线程都不是很多。不会有很大的并发的可能。
所以只能现在看看什么情况了。

谢谢。
北京的雾霾天 2009-03-04
  • 打赏
  • 举报
回复
每次执行都使用上数据库的事务。
天乐 2009-03-04
  • 打赏
  • 举报
回复
性能上面,有些东西可以考虑使用缓存
天乐 2009-03-04
  • 打赏
  • 举报
回复
呵呵,下次问题要描述清楚啊,大家才好帮忙

做这种事情,主要需要注意:

1、数据库操作要用事务

2、多线程访问数据库最好统一在一个地方进行,并进行加锁,即进行线程同步控制



benbenr 2009-03-04
  • 打赏
  • 举报
回复
刚刚和同事讨论了下,好像现在称述的信息太少了。

我在SQL执行的时候,在更新1种情况的时候可能有多个SQL放在List都要执行。

而且程序有涉及到线程。

在多个sql都要执行的时候可能会出现执行失败的情况,现在打算把这写个相关的sql用事务绑上。

还有点代码不好的地方,性能方面的,在同事的指点下也先改改。

别的还有什么想知道的?我可以说说。
天乐 2009-03-04
  • 打赏
  • 举报
回复
帮顶,不太清楚,是不是要多点信息给大家

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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