C#+oracle,使用System.Data.OracleClient提供程序,
查询代码如下:with aa as  (select dvid from 
(select dvid,level as llevel 
from vw_x_dvlist
connect by dvpid=prior dvid
start with invname like '%汽%'
) a 
group by dvid having sum(llevel)=1)
select b.*,level as llevel from dm_dvfile b 
connect by b.dvpid=prior b.dvid
start with dvid in (
select dvid from aa 
);在Sql developer中执行不到两秒的时间,总数据量为560条
如果在C#程序中执行此程序,会报操作超时错误
代码片断如下:      OracleConnection=New OracleConnection(_cn);
OracleCommand oracmd=new Oraclecommand();
oracmd.Connection=oracn;
OracleDataAdapter orada=new OracleDataAdapter(oracmd);
DataSet ds=new DataSet();
oracmd.Commandtext="上述SQL脚本"
orada.Fill(ds);    --在此处长时间没有响应,报操作超时错误

解决方案 »

  1.   

    程序中的 代码没错,这里面是我手输入的,少了点东西,
    1-oracn 
    2-_cn=连接字符串,这个是没有问题的,因为其他使用此连接字符串的功能都正常
    3-少了分号
    不要介意这么多,我只是奇怪,为什么会这么慢以致超时
      

  2.   

    加上TRY catch 
    分析下
    我估计多半是连接字符串那里有问题
      

  3.   

    1、你把那个写成存储过程了吗?那段pl/sql代码是否编译成oracle的存储过程了?
    2、你在C#中调用的时候,是否没有指定是调用一个存储过程
    oracmd.CommandType=CommandType.StoredProcedure;
      

  4.   

    oracn.Open();是没有问题的,
    没有写成存储过程;
    已经换用驱动程序了,odbc/odp.net都用过了,odbc,直接没有结果而返回,两秒内,
    odp.net跟data.oracleclient一样没有响应
      

  5.   

    应该是驱动对这种语法不支持,你试试使用标准sql看看
      

  6.   

    请楼主将你SQL中的
    connect by .......start with类似这种语法换成SQL标准语法,可以吗?
    不行的话就把逻辑写到代码里
    估计是这个问题
      

  7.   

    odp.net和oracleClient都能出结果的,只是等待时间非常的长,语法肯定是受支持的,还有其他方面的原因吗?
      

  8.   

    UP一下,等待高手解决,我的看法是两个connect by的问题,一个没有问题,速度挺快的