日期:2014-05-18  浏览次数:20491 次

数据库并发访问
应用程序运行的windows terminal server上,在多用户情况下,如果两个用户同时修改同一个表的时候,就会发生错误.对这个表的修改是在用户做拷贝动作的时候发生的,在第一个用户拷贝的时候,这时候另外一个用户也去拷贝,他们都需要修改同一个表,这时候冲突就发生了,不可接受的时候,这个时候,第一个用户的操作也会中途失败.
抛异常的地方 recordset::update()调用的dbcore.cpp:ThrowDBException((RETCODE)(lRowsAffected ==0 ?
  AFX_SQL_ERROR_NO_ROWS_AFFECTED:
  AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED))
异常信息的pexception->m_strError是 no rows were affected by the update or delete operation.
我想知道,有没有好的建议,在两个用户同时update一个表的时候,能够协调好.
谢谢大家了.
大概源代码是这样:
C/C++ code
 
void getID()
{
  begintrans;

  update(table);//这个函数出错,用的是ODBC机制

  committrans;
}


上面这个函数会被在一些递归函数中调用很多次.谢谢大家了,份不够再开贴加.

------解决方案--------------------
数据库在进行并发访问的时候,会自动对相应的对象进行加锁。可以设置加锁的粒度,把锁的粒度设置小一点。也可以设为不加锁,但是不建议这样,因为会造成数据的不一致等等错误。
------解决方案--------------------
探讨
引用:
数据库在进行并发访问的时候,会自动对相应的对象进行加锁。可以设置加锁的粒度,把锁的粒度设置小一点。也可以设为不加锁,但是不建议这样,因为会造成数据的不一致等等错误。

怎么设置呢?

------解决方案--------------------
帮顶。
------解决方案--------------------
探讨
老乌龟,你觉得好一点的解决方法是什么呢,谢谢啦