我想在程序中访问一个数据库链接,在plsql中测试通过,也有结果集返回。
但是在C#中,执行该sql提示错误:“ora-02041: 客户端数据库未开始一个事务处理。”
执行的sql语句仅仅是一个查询而已,不是调用的存储过程。用的连接是oracleconneciton
数据库和客户端8.1,客户端试了9.2也不行。
在线等,急!

解决方案 »

  1.   

    执行一下别的sql会不会出错?
      

  2.   

    我这边有
    db1 和 db2两个数据库,db1建立了一个dblink到db2,程序里是直接连接的db1,当查询db1本身的表时没有错误,当需要通过dblink访问db2的表时就会出现错误。但所有的这些sql语句在PL/SQL和SQL Plus中执行都没有错误。单单在程序中执行出错。
      

  3.   

    这是建dblink的sql-- Drop existing database link 
    drop public database link db2.US.ORACLE.COM;
    -- Create database link 
    create public database link db2.US.ORACLE.COM
      connect to user2 identified by userpass
      using 'db2';
      

  4.   

    select ... from 表名@远程连接名
      

  5.   

    你的查询语句用的是@db2.US.ORACLE.COM吗?
      

  6.   

    没错,是这样用的。
    就是在程序里不行,plsql和sqlplus都可以。
      

  7.   

    凡是牵扯到dblink的表都不行,本地的表都行。
      

  8.   

    这个不知道有没有用
    1. 进入"控制面板"-->"数据源(ODBC)"-->DSN配置画面
    把WORKAROUND标签中"DISABLE MICROSOFT TRANSACTION SEN....."选项打勾
    2. 重新连接ODBC
      

  9.   

    用的是OracleConnection,没有用ODBC。配置都是在Oracle里面做的。
      

  10.   

    那你在程序里加入Oracle的事务试一试啊
      

  11.   

    Oracle的事务也试了,还是没弄出来。
    算了,还是把表导到本地,做一个triger更新本地的表吧。
      

  12.   

    完了,新的办法也不行。远程的是视图,不能做trigger的说。
    各位达人,还有什么办法能解决这个问题的吗??
    253了
      

  13.   

    修改 tnsnames.ora 
    globalname = ture 改成 = false;
    重启,ok
      

  14.   

    你可以这样,在数据库A上建立和数据库B相同的表,然后再数据库B上建立到A的DBlink,再在数据库B的表上建立触发器,当库B的表被修改后,触发器修改数据库A上的相应表。这样,你就直接使用数据库A上的这个表就行了。