追问: 多线程访问数据库,其中有一个线程会长时间占用数据库。这个线程是独立线程,另外有一个线程池也会访问数据库,这个线程池中的线程我用lock锁住数据库了,但是由于独立线程和线程池线程不在同一个方法中,所以访问数据库的时间不同,用lock只能对线程池线程有效 回答: 你这么讲一定能保证两个线程不会在一个时刻共同发起对数据库的访问么?除非你做了很多同步让两个线程都按照你设计的逻辑不发生访问数据库的冲突,否则你必须加锁。看你的说明,你应该没加同步,所以他会出现冲突,你不能缺锁,他是共享资源的访问了。 追问: 恩,好的。受教了。
sql是说MSSQL吧 ? MSSQL是有锁。但是不会自动加锁,需要在SQL语句,那设置事务 。不是事务进程 不会自动加锁。
access 是完全没有锁 。只能在程序里面设置不让他并发 。并发必死锁。
1)所谓“C# *** 作数据库”真正含义是应用程序通过ADONET与数据引擎交互,从而实现对数据的 *** 纵,也就是所谓的“数据的CRUD——Create Read Update Delete”。如下所示:
Application <---> ADONET <---> Data Engine <---> Data CRUD
应用程序提交的SQL语句经过ADONET,送入数据引擎后被解释执行,完成数据的CRUD
2)SQL命令被送入了数据引擎后,数据引擎负责 *** 作中所涉及的同步(加锁/解锁),这是数据引擎的内部行为,应用程序没有必要(也不可能)干预数据引擎的 *** 作。应用程序唯一能做的就是:提交SQL命令,然后等待数据引擎完成处理。
3)数据引擎处理的结果有两种:正常结束和异常结束。数据库处理超时属于异常结束的一种。
以上就是关于多线程 *** 作数据库,如何避免冲突除了用lock加锁以外 还有其他方式吗全部的内容,包括:多线程 *** 作数据库,如何避免冲突除了用lock加锁以外 还有其他方式吗、sql,access数据库的 *** 作会自动加锁吗、C# 在 *** 纵数据库的时候,突然该表格被加锁,程序会自动等待该表解锁吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)