vb.net显示SQL Server不存在或拒绝访问怎么解决?

常见并发并发一致性问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。

下面我们先来看一个例子,说明并发操作带来的数据的不一致性问题。

考虑飞机订票系统中的一个活动序列:

  1. 甲售票点(甲事务)读出某航班的机票余额A,A=16.
  2. 乙售票点(乙事务)读出同一航班的机票余额A,也为16.
  3. 甲售票点卖出一张机票,修改余额AA-1.所以A15,A写回数据库.
  4. 乙售票点也卖出一张机票,修改余额AA-1.所以A15,A写回数据库.

结果明明卖出两张机票,数据库中机票余额只减少1

归纳起来就是:两个事务T1T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。前文(2.1.4数据删除与更新)中提到的问题及解决办法往往是针对此类并发问题的。但仍然有几类问题通过上面的方法解决不了,那就是:

不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。具体地讲,不可重复读包括三种情况:

事务T1读取某一数据后,事务T2对其做了修改,当事务1再次读该数据时,得到与前一次不同的值。例如,T1读取B=100进行运算,T2读取同一数据B,对其进行修改后将B=200写回数据库。T1为了对读取值校对重读BB已为200,与第一次读取值不一致。

事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神密地消失了。

事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。(这也叫做幻影读)

""数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为""数据,即不正确的数据。

产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。

2 并发一致性问题的解决办法

封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能再读取和修改A

共享锁又称为读锁。若事务T对数据对象A加上S锁,则其它事务只能再对AS锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

在运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如应何时申请X锁或S锁、持锁时间、何时释放等。我们称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。下面介绍三级封锁协议。三级封锁协议分别在不同程度上解决了丢失的修改、不可重复读和读""数据等不一致性问题,为并发操作的正确调度提供一定的保证。下面只给出三级封锁协议的定义,不再做过多探讨。

1级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。1级封锁协议可防止丢失修改,并保证事务T是可恢复的。在1级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读""数据。

2级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。2级封锁协议除防止了丢失修改,还可进一步防止读""数据。

3级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。3级封锁协议除防止了丢失修改和不读''数据外,还进一步防止了不可重复读。

经过近一周的熟悉编写的计算机管理系统贴出来,做一个对这几天辛苦努力的回顾。

这是桌面上形成的图标,漂亮吧,这要归功于 编写的程序要比传统vb6编写的程序启动慢一些(主要表现在第一次启动而且再较低配置的计算机上时),所以加了个很是讨我这个外行人喜欢。

这是我编写的其中一个查询的界面,主要用了treeview,listview,strip这三个类,在这几天的编程中,对.net平台的类有了很多的认识,对重载和集成也有感觉了,隐隐约约能感觉到高度对象化的思想几乎无所不能。
当然这个程序还没有编完,这只实现了全厂互联网计算机管理的查询,还没有实现增删改以及用户管理,这在菜单中都有体现,这些功能再我写的需求分析里已经考虑到了,不过还没有细化,我编写程序的特点就是一边编、一边产生新想法,然后直接按照新想法去做,最后的成果往往令我自己激动不已。
我不是professional,所以这么一点小小的成绩都会满足高兴成这个样子。
最大的感触就是以后要用命令去建库建表,这样放在程序里,我猜想到了其他安装Sql Server的计算机后,点击个按钮就可以轻松建立满足程序要求的数据库和表等了。
学习sql server2005 的过程中,发现也可以使用自动编号的,方法就是在设计字段的时候将标识设置为“是”,将种子和增量设为“1”即可。
还有就是nchar 和vchar(既不清楚了)的区别,带n的表示定长,你输入的字节数不够的话,系统自动补空格,填到指定长度。带v的表示可变,也就是我们所需要的,只要不超过设定的最大长度,输入几个字节,就是几个字节。这是我在select * from table where dept1= "厂团委"时发现的。
呵呵,学习一旦投入进去,学起来也是很快的,我现在还是个菜鸟,我的目标是~~~~听好了    “老菜鸟”
接下来宣布一件重要的事情,那就是今晚好好洗一个澡,放松放松,今天就给自己放一晚上的假,休息休息我的大脑~~~~~

我要回帖

更多关于 缺vb1的症状有哪些症状 的文章

 

随机推荐