2 onsmile OnSmile 于 2014.08.28 14:49 提问

C# 开发中遇到的MSSQL 锁的问题

假如有2 表 (用户表)USER和(日志表)LOGS 表,表字段我只列出需要用到的
用户表字段
ID int
name nvarchar(50)
umoney money

日志表
ID int
UID int 此字段为用户表ID
amoney money 变动后金额
bmoney money 变动前金额
cmoney money 变动金额

现在就是程序对用户的金额进行操作,操作的来源不唯一,可能是后台,可能是客户自己操作了什么东西,或者其他地方的来源
如何保证 用户表和日志表的 金额不出错,且不出现死锁
我现在的方案是使用事务来处理的,用户表的那条数据加锁,直到此事务处理完毕。这样就有一个问题了,就是容易出现死锁。。。本人对MSSQL锁了解得不是非常深入,使用上有问题
我的使用方式

开始事务
select * XXX with(xlock,rowlock)
。。。。。。。。。。一系列操作
提交事务
我一直觉得有什么不对的地方

求指教。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#开发过程中碰到的问题 经验总结
1年的工作经验 各位编码的兄弟 欢迎继承 避免你们在工作中碰到这样的问题,能快速的解决,此文档针对新手有用,编码超过2年的可以不用下载。 对于新人在工作中给予鼓励与支持。记得要保留下你们处理问题的方法,总结后分享给后来的人!
C#开发之遇到的一些字符串问题
string recData;//接收数据转码后缓存 byte[] recBuffer = (byte[])recQueue.Dequeue();//出列Dequeue(全局) recData = System.Text.Encoding.Default.GetString(recBuffer);//转码 string temp = recBuffer16.ToString().Replace("
C# 编程常见十大问题
关于本文 本文描述了10个 C# 程序员常犯的错误,或应该避免的陷阱。 尽管本文讨论的大多数错误是针对 C# 的,有些错误与其他以 CLR 为目标的语言,或者用到了 Framework Class Library (FCL) 的语言也相关。 常见错误 #1: 把引用当做值来用,或者反过来 C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用
C#学习中遇到问题、解决问题(1)
string str = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));解码:Application.StartupPath 取程序启动路径 例如这样: “D:\C#XM
C# .net sqlserver 并发处理
当多个用户同时更新同一数据的时候,由于更新可能导致数据的不一致性,使得程序的业务数据发生错误,这种情况可以称之为并发。在ADO .NET中,并发的处理可以通过三种方式来控制:保守式并发控制、开发式并发控制以及最后更新生效方式。 — 保守式并发控制:数据从数据库取出之后,一直处于锁定的状态,其他用户不能获取该数据,直至数据更新完毕之后,用户才能取出该数据进行操作。此种控制方式对于性能和资源占用得很多,由于只能同时有一个用户对数据享用操作权,所以可能会在正常业务中,影响其他用户的处理进程。但此控制方
Ext jsGrid 锁列问题
用于Ext开发Grid中遇到的所锁列的问题,这个很有帮助
深入浅出解析mssql在高频,高并发访问时键查找死锁问题
深入浅出解析mssql在高频,高并发访问时键查找死锁问题 SQL Server死锁使我们经常遇到的问题,数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁。希望对您学习SQL Server死锁方面能有所帮助。 死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产
学习安卓开发以来遇到的问题
1.Genymotion模拟器启动后白屏的问题 通过更新显卡驱动程序解决 2.Oracle VM VirtualBox 提示 VT-x AMD-v 没有启用 去BIOS启用虚拟化相关项 3.在模拟器运行安卓应用时提示ADB异常 把Genymotion的ADB设置为use custom Android SDK tools。 4.Android SDK6在运行时报错:You need to
C#.NET开发中常用的技术问题汇总(持续更新)
C#.NET开发中常用的技术问题汇总 001.判断一个Form是否已关闭并释放,需要从引用和对象两方面来判断,     判断引用是否为null: mainfm == null     判断引用的对象是否已释放: mainfm.IsDisposed     MainForm mainfm;     ......     private void button_ok_Click(objec
ssh开发中遇到的一些小问题的解决办法
ssh开发中遇到的一些小问题的解决办法,或许有能帮到你的也说不定