• pb11 PB12 查询数据时死锁问题解决办法<转>


    pb11 -- PB12 查询数据时死锁问题解决办法<转>

    一、 原先PB11中连接方式是:
    // Profile iadserver
    SQLCA.DBMS = "OLE DB"
    SQLCA.LogPass =profilestring('dbms.ini' , "database" , "logpass" , "")
    SQLCA.LogId = profilestring('dbms.ini', "database" , "logid" , "")
    SQLCA.AutoCommit = False
    SQLCA.DBParm = "PROVIDER='SQLOLEDB',"+&
    "DATASOURCE='" + profilestring('dbms.ini' , "database" , "serverip" , "") + "'," +&
    "PROVIDERSTRING='Database="+profilestring('dbms.ini' , "database" , "dbname" , "")+"'"

    connect using sqlca ;
    if SQLCA.SQLCode <> 0 then
    messagebox("提示信息:", '连接数据库出错!' + SQLCA.SQLErrText , stopsign!)
    rollback using sqlca ;
    halt close
    end if

    二、经高人指点后的连接方式
    用以上连接方式,经常在查询的时候都死锁,没有办法,在查询完成后都要COMMIT,后来有位高人指点,增加了

    加上sqlca.lock='RU' 或者 sqlca.lock='RC' 可以解决死锁问题。

    具体连接方式如下:
    // Profile iadserver
    SQLCA.DBMS = "OLE DB"
    SQLCA.LogPass =profilestring('dbms.ini' , "database" , "logpass" , "")
    SQLCA.LogId = profilestring('dbms.ini', "database" , "logid" , "")
    SQLCA.AutoCommit = False

    SQLCA.Lock='RC'
    SQLCA.DBParm = "PROVIDER='SQLOLEDB',"+&
    "DATASOURCE='" + profilestring('dbms.ini' , "database" , "serverip" , "") + "'," +&
    "PROVIDERSTRING='Database="+profilestring('dbms.ini' , "database" , "dbname" , "")+"'"

    connect using sqlca ;
    if SQLCA.SQLCode <> 0 then
    messagebox("提示信息:", '连接数据库出错!' + SQLCA.SQLErrText , stopsign!)
    rollback using sqlca ;
    halt close
    end if

    三、 MS SQL中lock属性
    RU Read Uncommitted
    RC Read Committed
    RR Repeatable Read
    TS Serializable
    查阅SQL SERVER2005联机丛书有以下描述:
    sql server 数据库引擎隔离级别
    SQL-99 标准定义了下列隔离级别,Microsoft SQL Server Database Engine 支持所有这些隔离级别:
    未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据)
    已提交读(数据库引擎 的默认级别)
    可重复读
    可序列化(隔离事务的最高级别,事务之间完全隔离)
    实际测试发现,当设置sqlca.lock='RR'可重复读时,会出现死锁,其他三种不会。

    似乎PB10以上版本缺省是sqlca.lock='RR'才会造成死锁,一般是用“RC”。
    低版本的PB用MS SQLSERVER连接时的默认级别,适用于大多数情况,当然还要看你的具体应用了。

  • 相关阅读:
    纪念--
    【csp模拟赛1】铁路网络 (network.cpp)
    【csp模拟赛1】不服来战 (challenge.cpp)
    【csp模拟赛1】T1 心有灵犀
    【luoguP3959 宝藏】-状压DP
    透彻网络流-wfx-最大流
    【luogu2668斗地主】模拟
    【hdu4734】F(x)-数位DP
    【8.27-模拟赛】remove
    清北学堂-济南游记
  • 原文地址:https://www.cnblogs.com/wallis0922/p/2670340.html
Copyright © 2020-2023  润新知