SQL 进程死锁

[复制链接]
查看11 | 回复4 | 2008-8-18 17:54:48 | 显示全部楼层 |阅读模式
SQL 执行语句出现死锁现象:
如果多执行类似:conn.Execute "UPDATE cardbak SET czpc = '0',sjs='0' WHERE (cardzt=9 or cardzt=8) and czpc = '" & UCase(Text52) & "'"
这方面的语句就会偶尔出现进程被死锁!
而如何用:rs.open这方面的语句就不会出现,是怎么回事呢??
用UPDATE速度据说要比RS.OPEN要快,是真的吗?

回复

使用道具 举报

千问 | 2008-8-18 17:54:48 | 显示全部楼层
首先,需要把你的AutoCommit=TRUE,然后,这是一个编程习惯问题,在pb中,对于数据窗口的操作,首先设置数据窗口的提交方式,我一直采用 key columns,use update,然后记得在每次连接完成后,记得及时释放,譬如,在retrieve完成后,记得及时利用resetupdate()清除数据状态,然后,再每次数据库更新,也就是update()后,记得利用 ll_num1=.update()if ll_num=1 then commit;dw_free.resetupdate( )elserollback;messagebox("提示!","数据保存失败! ")end ...
回复

使用道具 举报

千问 | 2008-8-18 17:54:48 | 显示全部楼层
你的两个问题的回答是肯定的。rs.Open是单纯打开结果集,是读操作,一般不会死锁;另外一个问题,Update的速度是比rs.Open要快,因为Update的数据传递量少,而且基本上是单向操作,就是发送指令到数据库服务器,然后在服务器侧运行;而rs.Open不但要发送查询指令到数据库服务器,还要把产生的结果集返回到客户端,网络流量大,需要的时间要...
回复

使用道具 举报

千问 | 2008-8-18 17:54:48 | 显示全部楼层
这两个根本不是一回事。RS.OPEN是打开一个记录集并返回到客户端。而UPDATE是要更新表里的数据,要执行更新,一定会有相应的锁操作,而打开记录集则不需要。...
回复

使用道具 举报

千问 | 2008-8-18 17:54:48 | 显示全部楼层
进程是否死锁不取决于是使用什么方式操作sql语句,而是你要分析为何会死锁,是否在等待上一个操作的结束?分析清楚了在讨论...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行