如何解决access数据库查询和读写的冲突

如何解决access数据库查询和读写的冲突,第1张

当我打开一个数据连接,对一个access数据库进行查询,另一个人要对该数据库进行写 *** 作(保存数据),就会发生数据无法保存的情况,而且我打开的数据连接也不能关闭(本来程序是会自动检测的,如果没有关闭就立即关闭)

这个access数据库是属于一个应用程序的,数据都是自己输入的,为了省力,我想在我的程序中调用数据库中的数据(这样可以免去重复输入)。应用程序用什么语言编写我不是很清楚,我的程序是用vbnet编写的网页,只需要读取access中的数据。连接字符串如下:

strConn = "Provider=MicrosoftJetOLEDB40;Data Source=\\YR002\Data\DataMDB;"

顺便问一下,要访问另一台电脑中的access数据库,是否一定要把数据库所在目录设置为共享目录?

我得程序调用access数据库方法:

strConn = "Provider=MicrosoftJetOLEDB40;Data Source=\\YR002\CusData\CustomData2004MDB;"

If cnConnState = ConnectionStateClosed Then

cnConnOpen()

End If

dsExecute = New DataSet

Dim sdaDataAdapter As New OleDbDataAdapter(strSQL, cnConn)

sdaDataAdapterFill(dsExecute, "data")

sdaDataAdapterDispose()

cnConnClose()

Return dsExecute

先在父表中将对应的记录插进去,再插子表,因为子表中外键约束的一列数据必须在父表中存在。像学生表和学生成绩表,在学生成绩表中要插入一条记录,如果此记录中学号字段的值在学生表中找不到,即不存在这个学生,自然学生成绩表中就插不进去。

追问: 多线程访问数据库,其中有一个线程会长时间占用数据库。这个线程是独立线程,另外有一个线程池也会访问数据库,这个线程池中的线程我用lock锁住数据库了,但是由于独立线程和线程池线程不在同一个方法中,所以访问数据库的时间不同,用lock只能对线程池线程有效 回答: 你这么讲一定能保证两个线程不会在一个时刻共同发起对数据库的访问么?除非你做了很多同步让两个线程都按照你设计的逻辑不发生访问数据库的冲突,否则你必须加锁。看你的说明,你应该没加同步,所以他会出现冲突,你不能缺锁,他是共享资源的访问了。 追问: 恩,好的。受教了。

首先确定冲突 *** 作:

同一事务的两个动作冲突:ri(X);wi(X),

不同事务对同一数据库元素的写冲突:wj(X);wi(X),

不同事务对同一数据库元素的读和写冲突:ri(X);wj(X),

这些都是冲突 *** 作:r1(A) w1(A) , r1(A) w2(A) , w2(A) r1(A) , w1(A) w2(A),

优先图的画法如下:

节点: S中的事务

弧: Ti ->Tj whenever

- pi(A), qj(A) 涉及同一数据库元素

- pi(A) <S qj(A)

- pi, qj 至少一个是写动作

如果存在环, S 不是冲突可串行的, 否则, S 是冲突可串行的

例如S=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)

其中w1(A)r2(A)得出T1 ->T2 ,w1(B)r2(B)得出T1 ->T2

无环,所以是可串行调度

再如:S1=r2(A);r1(B);w2(A);r2(B);r3(A);w1(B);w3(A);W2(B)

r2(A);w3(A);得出T2->T3

r1(B); W2(B)得出T1 ->T2

r2(B);w1(B);得出T2 ->T1

有环,S1 不是冲突可串行化的

以上就是关于如何解决access数据库查询和读写的冲突全部的内容,包括:如何解决access数据库查询和读写的冲突、如何处理数据库中设置外键引起的冲突、多线程 *** 作数据库,如何避免冲突除了用lock加锁以外 还有其他方式吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9715984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存